В чем концептуальная разница между SynchronizationContext и TaskScheduler

Стивен Тоуб написал в блоге, что

И SynchronizationContext, и TaskScheduler являются абстрактными. на том, что представляют собой «планировщик», то, над чем вы работаете, и это определяет, когда и где выполнять эту работу. Есть много разных формы планировщиков. Например, ThreadPool — это планировщик: вы вызовите ThreadPool.QueueUserWorkItem, чтобы предоставить запускаемый делегат, который делегат ставится в очередь, и в конечном итоге один из потоков ThreadPool подхватывает и запускает этого делегата.Ваш пользовательский интерфейс также имеет планировщик: насос сообщений.

Так System.Reactive.Concurrency.EventLoopScheduler, Dispatcher, ThreadPool, TaskScheduler, SyncrhonizationContext и реализации реактивных расширений IScheduler в этом смысле являются "планировщиками".

В чем между ними разница?

Зачем они все были нужны? Я думаю, что получаю EventLoop, Dispatcher, ThreadPool. IScheduler также хорошо объяснен.
Но TaskScheduler и SyncrhonizationContext мне до сих пор не ясны.

Отличная статья Стивена Клири объясняет SyncrhonizationContext, и я думаю, что понял. Зачем тогда нам понадобился TaskScheduler, непонятно.

Пожалуйста, объясните или укажите источник.

26
задан Gennady Vanin Геннадий Ванин 16 April 2013 в 14:17
поделиться