【发布时间】:2020-02-19 07:53:55
【问题描述】:
当我从使用特定调度程序运行的任务启动任务时,使用哪个任务调度程序?
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 请求(可能启动任务和/或使用其他 TPL 功能)的优先级和并发限制。
【问题讨论】:
-
无论在子 TPL 方法中哪个 task scheduler 与 current thread 相关联,都会使用默认的 task scheduler (如图所示)AFAIK
-
@MichaelRandall 所以链接的博客文章中的这个声明是错误的? “任务和它们包含的并行循环都将被限制为最大并发级别 4。”
-
Stephen 将 task scheduler 传递到
Parallel.For选项中,你不是 -
@MichaelRandall 谢谢,我是个白痴
标签: c# .net task task-parallel-library