【发布时间】:2012-03-23 17:11:59
【问题描述】:
SynchronizationContext 和 TaskScheduler 都是抽象 代表一个“调度器”,你给它一些工作的东西,它 确定何时何地运行该工作。有很多不同的 调度程序的形式。例如,ThreadPool 是一个调度器:你 调用 ThreadPool.QueueUserWorkItem 以提供要运行的委托,即 委托排队,最终线程池的线程之一 拿起并运行该委托。您的用户界面也有一个 调度程序:消息泵。
所以System.Reactive.Concurrency.EventLoopScheduler、Dispatcher、ThreadPool、TaskScheduler、SyncrhonizationContext 和 IScheduler implementations of Reactive Extensions 在这个意义上都是“调度程序”。
它们有什么区别?
为什么它们都是必要的?我想我得到了 EventLoop、Dispatcher、ThreadPool。 IScheduler 也有很好的解释。
但是我仍然不清楚 TaskScheduler 和 SyncrhonizationContext。
Stephen Cleary's excellent article 解释了SyncrhonizationContext,我想我明白了。那么为什么我们需要TaskScheduler,目前还不清楚。
请解释或指出来源。
【问题讨论】:
-
答案可能有很多原因。我在这篇 MSDN 博客文章中找到了另一个尚未提及的内容:blogs.msdn.com/b/pfxteam/archive/2012/01/20/10259082.aspx 它说 SyncrhonizationContext.Post 异步方法在执行工作项时不提供通知。文章建议如何添加一个使用 TaskCompletionSource 返回任务的扩展方法。
标签: c# multithreading task-parallel-library system.reactive conceptual