在哪个调度程序Task.ContinueWith()运行?

bav*_*aza 8 c# task task-parallel-library

请考虑以下代码:

// MyKickAssTaskScheduler is a TaskScheduler, IDisposable
using (var scheduler = new MyKickAssTaskScheduler())
{
    Task foo = new Task(() => DoSomething());
    foo.ContinueWith((_) => DoSomethingElse());
    foo.Start(scheduler);
    foo.Wait();
}
Run Code Online (Sandbox Code Playgroud)

是否ContinueWith()保证在我的调度程序上运行任务?如果没有,它将使用哪个调度程序?

Pra*_*ana 9

StartNew,ContinueWith将默认为TaskScheduler.Current,当未在任务(MSDN)内调用时,Current将返回Default调度程序.

要避免出现默认调度程序问题,应始终将显式TaskScheduler传递给Task.ContinueWith和Task.Factory.StartNew.

ContinueWith是危险的