发行“;等待”;在从线程池启动的任务中
本文关键字:启动 任务 线程 等待 发行 | 更新日期: 2024-09-25 02:18:21
很明显,使用"wait"从UI线程卸载Task是一件很棒的事情——然后UI线程可以重新处理Windows消息。
但假设您使用Task.Run启动等待中的Task,它在ThreadPool的线程上启动您的代码。在代码中执行"等待"有什么价值吗(从技术上讲,有什么价值?)?
我很想说"不"。为什么要从ThreadPool线程中卸载工作?除了处理分配给它的原始任务外,它还需要做什么?
现在,如果有人回复说,如果我进行等待,ThreadPool线程实际上可以"释放"到池中并在其他地方使用,我会印象深刻,而我的异步工作仍在继续。。。
Michael
从技术上讲,它甚至可以做到吗?
是的。由于没有当前的SynchronizationContext
,因此生成的延续将在(可能)不同的ThreadPool线程上运行。然而,该机制运行良好。
在该代码中执行"等待"有什么价值吗?
是的,有。见下文。
为什么要从ThreadPool线程中卸载工作?除了处理分配给它的原始任务外,它还需要做什么?
你可以腾出线程来做其他工作。ThreadPool线程是一种有限的资源。
现在,如果有人回复说,如果我进行等待,ThreadPool线程实际上可以"释放"到池中并在其他地方使用,我会印象深刻,而我的异步工作仍在继续。。
是的,事实上就是这样。
除了能够发布任务之外,这样做还有另一个巨大的优势——无论您是在ThreadPool上还是在具有同步上下文的线程上,都可以使用相同的方法和相同的代码。重用相同代码的能力也是非常有价值的。