.NET 4.5异步和TPL的区别

10

我开始阅读有关.NET 4.5异步编程的内容,但实际上在使用模式方面还不能充分理解。因此,我将尝试通过一个直接的问题来了解:

我通常使用.NET 4 TPL从我的ASP.NET应用程序内部调用昂贵的Web服务和数据库调用。看起来我可以使用Async来实现同样的功能。这是真的吗?何时使用哪个?

提前感谢。

3个回答

16

TPL是一个用于并行计算的库。.NET 4.5 async是一种语言特性,建立在TPL之上,使得处理过程更加轻松。当您有多步骤的工作流时,这一点尤其适用。

简而言之,async允许您编写代码,就像它是同步的一样,因此逻辑流保持完整。使用async可以以非常自然的方式等待任务完成,并在发生这种情况时运行特定的代码。C# 5.0和VB 11.0编译器使用TPL和一些新的与async相关的类型将您的代码转换为相应的C# 4.0和VB 10.0代码。

如果你想深入了解async的内部原理,可以看Jon Skeet的Eduasync博客系列。

那么,如何决定使用哪个呢?嗯,async基本上抽象出了创建由异步调用链接在一起的代码序列的所有复杂性。假设当您调用Web服务或访问数据库时,您希望对返回的内容进行一些操作。async允许您将调用和处理代码结合在一起,这应该使您的代码更容易编写,也更容易阅读。


谢谢Jeffrey的回复,但仍然无法确定在何时使用哪个...例如,在Web服务调用示例中。 - mohamad halabi
1
使用async。如果您发现无法使用async完成某些任务,则可以使用TPL。如果这不够清晰明了,请将其选为答案,因为它是一个清晰简洁的解释。 - BentOnCoding

0

@Pawan 关于BeginXXX/EndXXX:我觉得你把事情搞混了。 看看C#,有三种不同的并行代码运行模式

  • 已弃用:异步编程模型(APM)
  • 已弃用:基于事件的异步模式(EAP)
  • 最新:基于任务的异步模式(TAP)

TPL是TAP构建的基础。TPL在.NET 4中引入。虽然TPL和TAP在Microsoft文档中有些相等地使用。无论如何,async/await只是C# 5引入的一种语言特性,意味着.NET 4.5,以简化对TPL的支持。

BeginXXX/EndXXX属于APM风格!所以它与TPL没有任何关系。这些多个版本使得保持概览变得困难。


-1

我猜测在内部,.Net TPL和async都使用线程池线程。Async可能是传统的BeginXXX/EndXXX模式的简化语法。

但更重要的是TPL使用线程池线程,您不应该将其用于执行昂贵的操作,因为框架本身也使用相同的线程。如果您有昂贵的操作(如您所提到的),则最好创建一个新的独立线程或在使用TPL时设置ThreadSchedular的“LongRunning”属性。


4
昂贵的输入/输出(I/O)并不等同于昂贵的中央处理器(CPU)。 - Mauricio Scheffer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接