Async和await vs ThreadPool / TaskFactory

时间:2014-03-04 12:13:55

标签: .net c#-4.0

在即发即弃的场景中,与使用ThreadPool.QueueUserWorkItem或Task.Factory.StartNew相反,使用异步和等待等待事物来装饰您的方法是否有任何优势?

1 个答案:

答案 0 :(得分:3)

根据我的经验,几乎不会发生“火灾和忘记场景”。考虑一下:如果操作失败怎么办?


asyncawait是关于释放当前线程的。对于UI应用程序,这可以为您提供响应能力;对于服务器端应用程序,这为您提供了可伸缩性。

ThreadPool.QueueUserWorkItemTask.Factory.StartNew(以及新的Task.Run)用于调度线程池线程的工作。它们使您能够将CPU绑定(或阻塞)工作安排到后台线程。

这两种方法的目的声音相似,但它们实际上是完全不同的。 Async / await最适合非CPU绑定的工作。例如,从服务器下载资源是I / O绑定操作; async / await方法不会阻止该下载的线程。但是,如果您要进行CPU绑定工作,并且不想占用UI线程,那么async本身对您没有帮助 - 您可以通过{{{}将工作排入线程池1}}。