在火灾和遗忘的场景中,用异步来装饰您的方法并等待一些可接受的东西有什么好处,而不是仅仅使用ThreadPool.QueueUserWorkItem或Task.Factory.StartNew?
发布于 2014-03-04 13:17:05
根据我的经验,“火灾和遗忘的情景”几乎没有发生过。考虑一下:如果操作失败怎么办?
async和await是关于释放当前线程的。对于UI应用程序,这给了您响应性;对于服务器端应用程序,这提供了可伸缩性。
ThreadPool.QueueUserWorkItem和Task.Factory.StartNew (以及新的Task.Run)用于调度线程池线程的工作。它们使您能够将CPU绑定(或阻塞)工作安排到后台线程。
这两种方法的目的听起来很相似,但实际上是完全不同的。异步/等待工作最适合于非CPU绑定的工作。例如,从服务器下载资源是一种I/O绑定操作;async/await方法不会阻塞该下载的线程。但是,如果您有CPU绑定的工作要做,并且不想绑定UI线程,那么async本身将无助于您--您将通过Task.Run将工作排队到线程池。
https://stackoverflow.com/questions/22171684
复制相似问题