你会在线程池线程上使用await关键字吗?

时间:2012-08-03 20:48:02

标签: .net asynchronous async-await

如果您决定从UI线程中卸载一些CPU密集型代码,方法是将它放在一个任务中并在线程池中运行它,那么这段代码本身是否会因使用“await”关键字而受益?

似乎答案似乎是“不”..

我的意思是,在UI线程中等待任务的主要原因之一是释放UI线程以执行之前的操作。如果您在线程池上运行时等待作为Task,那么您还可以释放该线程做什么?

我错过了一些非常明显的东西吗?

1 个答案:

答案 0 :(得分:3)

  

如果您决定从UI线程中卸载一些CPU密集型代码,方法是将它放在一个任务中并在线程池中运行它,那么这段代码本身是否会因使用“await”关键字而受益?

仅针对CPU密集型任务?也许不是。

但这并不是在线程池线程中运行代码的唯一原因。

考虑一个Web服务器 - 所有请求都将在线程池线程中处理......并且在处理这些请求时使用await(例如在等待数据库或其他Web服务响应时),您可以处理数百万几个线程上的请求。

此外,即使在丰富的GUI场景中,您可能希望将一些长时间运行的任务放入线程池线程,但仍然从该线程启动多个异步请求。 async / await鼓励异步操作组合的方式使得以一种异步的方式编写代码是完全合理的,无论它碰巧运行在哪个线程上。