.NET 中 starting/running/invoking 个任务时默认使用哪个任务调度程序?

Which task scheduler is used by default when starting/running/invoking tasks in .NET?

当我从 运行 具有特定调度程序的任务开始任务时,使用哪个任务调度程序?

Task.Factory.StartNew(A, CancellationToken.None, TaskCreationOptions.None, new MyTaskScheduler());

// ...

void A()
{
    // 1
    Parallel.Invoke(sometasks);

    // 2
    Task.Run(sometask);

    // 3
    Parallel.For(/*...*/);

    // 4
    // Any other task execution that isn't specifying a scheduler explicitly
}

是否所有示例都将由 MyTaskScheduler 安排?我想使用 QueuedTaskScheduler (From ParallelExtensionsExtras) 来处理复杂 Web api 请求的优先级和并发限制(可能会启动任务 and/or 使用其他 TPL 功能)。

对于大多数 TPL 方法,经验法则是默认使用 任务调度程序,无论使用哪个 任务调度程序当前线程 相关联,除非您明确指定它。

您会发现大多数方法要么采用 选项,后者将有一个 任务调度程序 属性,或者您可以提供一个在方法本身中作为重载