.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 方法,经验法则是默认使用 任务调度程序,无论使用哪个 任务调度程序 与当前线程 相关联,除非您明确指定它。
您会发现大多数方法要么采用 选项,后者将有一个 任务调度程序 属性,或者您可以提供一个在方法本身中作为重载
当我从 运行 具有特定调度程序的任务开始任务时,使用哪个任务调度程序?
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 方法,经验法则是默认使用 任务调度程序,无论使用哪个 任务调度程序 与当前线程 相关联,除非您明确指定它。
您会发现大多数方法要么采用 选项,后者将有一个 任务调度程序 属性,或者您可以提供一个在方法本身中作为重载