在即发即弃的场景中,与使用ThreadPool.QueueUserWorkItem或Task.Factory.StartNew相反,使用异步和等待等待事物来装饰您的方法是否有任何优势?
答案 0 :(得分:3)
根据我的经验,几乎不会发生“火灾和忘记场景”。考虑一下:如果操作失败怎么办?
async
和await
是关于释放当前线程的。对于UI应用程序,这可以为您提供响应能力;对于服务器端应用程序,这为您提供了可伸缩性。
ThreadPool.QueueUserWorkItem
和Task.Factory.StartNew
(以及新的Task.Run
)用于调度线程池线程的工作。它们使您能够将CPU绑定(或阻塞)工作安排到后台线程。
这两种方法的目的声音相似,但它们实际上是完全不同的。 Async / await最适合非CPU绑定的工作。例如,从服务器下载资源是I / O绑定操作; async
/ await
方法不会阻止该下载的线程。但是,如果您要进行CPU绑定工作,并且不想占用UI线程,那么async
本身对您没有帮助 - 您可以通过{{{}将工作排入线程池1}}。