Stephen Toub blogged cheQual è la differenza concettuale tra SynchronizationContext e TaskScheduler
Sia SynchronizationContext e TaskScheduler sono astrazioni che rappresentano un “scheduler”, qualcosa che si dà un po 'di lavoro da, ed è determina quando e dove esegui quel lavoro Esistono molte forme diverse di scheduler . Ad esempio, ThreadPool è un programma di pianificazione: si chiama ThreadPool.QueueUserWorkItem per fornire un delegato per l'esecuzione, che il delegato viene messo in coda e uno dei thread di ThreadPool alla fine preleva ed esegue tale delegato. L'interfaccia utente ha anche uno schedulatore : il messaggio pompa.
Così System.Reactive.Concurrency.EventLoopScheduler
, Dispatcher, ThreadPool, TaskScheduler, SyncrhonizationContext, e IScheduler implementations of Reactive Extensions sono tutti "scheduler" in questo senso.
Qual è la differenza tra loro?
Perché erano tutti necessari? Penso di avere EventLoop, Dispatcher, ThreadPool. Anche IScheduler è ben spiegato.
Ma TaskScheduler e SyncrhonizationContext non mi sono ancora chiari.
Stephen Cleary's excellent article spiega SyncrhonizationContext e penso di averlo capito. Perché poi abbiamo bisogno di TaskScheduler, non è chiaro.
Spiegare o indicare una fonte.
Ci potrebbero essere una serie di motivi, come suggerito da Answers. Un altro che non è stato menzionato ancora ho trovato in questo MSDN Articolo del blog: http://blogs.msdn.com/b/pfxteam/archive/2012/01/20/10259082.aspx Si dice che il metodo asincrono SyncrhonizationContext.Post non fornisce notifica quando viene eseguito l'elemento di lavoro. articolo suggerisce come aggiungere un metodo di estensione che utilizza TaskCompletionSource per restituire un'attività. –