.net - 你会在线程池线程上使用 await 关键字吗

标签 .net asynchronous async-await

如果您决定通过将一些 CPU 密集型代码放入任务中并在线程池中运行来从 UI 线程中卸载一些 CPU 密集型代码,那么这些代码本身是否会从使用“await”关键字中获益?

答案似乎是“不”。

我的意思是,在 UI 线程中等待 Tasks 的主要原因之一是释放 UI 线程,使其备份以执行它之前正在执行的操作。如果您在线程池上运行时作为任务等待,您将释放该线程做什么?

我是否漏掉了一些非常明显的东西?

最佳答案

If you decide to offload some CPU intensive code from the UI thread by putting it in a task and running it in the Thread Pool, would this code itself ever benefit from using the "await" keyword?

只是 CPU 密集型任务?也许不是。

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

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

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

关于.net - 你会在线程池线程上使用 await 关键字吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11803076/

相关文章:

c# - 将异步回调传递给 Timer 构造函数

rust - 异步fn和异步闭包之间的生存期推断有什么区别?

.net - 当 CLR 在 .net 中调用垃圾收集器时?

c# - 异步套接字的内存问题并开始发送

c# - 测试显示 "await"明显更慢,即使等待的对象已经完成

javascript - AsyncAwait 不等待获取响应

node.js - 在构建脚本中使用 util.promisfy 无法按预期工作

c# - 根据特定标准确定一行代码是否有效

.net - 需要有关调试 .net 应用程序中使用的 vb6 代码的帮助

c# - 使用 RX 查询,如何在每秒 3 秒的窗口内获取哪些记录具有相同状态?