2011-11-17 88 views
10

我开始阅读关于.NET 4.5异步的内容,但坦白地说,无法获取它的大部分内容,但是何时使用模式。所以我会试着去直接提问:.NET 4.5异步与TPL

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

在此先感谢。

回答

15

TPL是一个用于并行计算的库。 .NET 4.5异步是一种构建在TPL基础之上的语言功能,它使流程更加简单。当您拥有多个步骤的工作流程时尤其如此。

简而言之,async可让您编写代码,就好像它是同步的,因此逻辑流程保持不变。等待任务完成的过程可以通过async以非常自然的方式完成。 C#5.0和VB 11.0编译器使用TPL和一些新的相关类型将代码转换为等效的C#4.0和VB 10.0代码。

对于async的一个很好的内部解释,请参阅Jon Skeet的Eduasync博客系列。

那么,你如何决定使用哪个?那么,async基本上将创建一系列代码片断的复杂性抽象出来,这些代码片断通过异步调用链接在一起。推测当你调用一个Web服务或访问一个数据库时,你想对返回的内容做些什么。 async允许您将调用和处理代码放在一起,这会使您的代码更容易编写,并且以后也更容易阅读。

+0

谢谢jeffrey的回复,但还是不知道何时使用哪个..例如在Web服务调用示例中说。 –

+1

使用异步。如果你发现某些东西你不能使用async,那么继续使用TPL。如果那不清楚。这应该被选为答案,因为它是一个清晰简明的解释。 – BentOnCoding

-1

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

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

+4

昂贵的I/O!=昂贵的CPU –

0

@Pawan关于BeginXXX/EndXXX:我认为你在混合这些东西。 寻找到C#,有运行的并行代码的3种不同的patterns

  • 推荐使用:异步编程模型(APM)
  • 推荐使用:基于事件的异步模式(EAP)
  • 截至到日期:基于任务的异步模式(TAP)

TPL是构建TAP的基础。 TPL在.NET 4中引入。尽管TPL和TAP在Microsoft文档中以某种方式使用同样的方式。无论哪种方式,async/await都只是C#5引入的一种语言特性,意思是.NET 4.5,以简化的方式支持TPL。

The BeginXXX/EndXXX belongs to the APM style!所以它与TPL没有任何关系。这些多个版本使得难以保持概述。