Asi*_*sik 4 .net task-parallel-library
Task.ContinueWith的一些重载不采用SynchronizationContext.他们使用什么SynchronizationContext来安排新任务?
nos*_*tio 12
默认情况下,ContinueWith使用TaskScheduler.Current针对后续任务,如可以在可见参考源.
这可能是混淆的来源,因为当前(环境)任务调度器可以不同于TaskScheduler.Default,并且它也可以与延续所附加的任务的调度器不同.这就是为什么类似的选项TaskCreationOptions.HideScheduler,并TaskContinuationOptions.HideScheduler进行了intriduced在.NET 4.5.
这是推荐显式调用时始终指定任务调度Task.Factory.StartNew和Task.ContinueWith.最常见的是,您指定TaskScheduler.Default(对于线程池任务调度程序)或TaskScheduler.FromCurrentSynchronizationContext().
Task.ContinueWith的一些重载不采用SynchronizationContext.
实际上,他们都没有拿SynchronizationContext,但有些人拿a TaskScheduler.
他们使用什么SynchronizationContext来安排新任务?
没有!默认情况下,继续由当前调度程序(TaskScheduler.Current)调度,当没有从a调用时,调度程序Task是TaskScheduler.Default.所以继续是在线程池的一个线程上运行的.ThreadPool线程没有关联的同步上下文(除非您明确设置了一个).