jam*_*nor 3 c# multithreading task parallel-extensions task-parallel-library
我正在寻找一个TaskScheduler:
LimitedConcurrencyLevelTaskScheduler(使用线程池线程)或WorkStealingTaskScheduler执行此操作.目前我们TaskScheduler.Default用于通用池(受线程池增长算法等的支配)以及new OrderedTaskScheduler()每当我们想要订购任务时.我想保持这种行为,但将这两个要求限制在我自己的专用线程池中.
QueuedTaskScheduler似乎非常接近.我认为QueuedTaskScheduler.ActivateNewQueue()返回子TaskScheduler的方法会在父级的工作池上执行IN ORDER任务,但似乎并非如此.子TaskSchedulers似乎具有与父级相同的并行化级别.
我不一定希望子任务调度程序任务优先于父任务调度程序任务(尽管它将来可能是一个很好的功能).
我在这里看到了一个相关的问题:有限的并发级别任务调度程序(具有任务优先级)处理包装的任务,但我的要求不需要处理异步任务(我的所有排队任务从头到尾完全同步,没有延续).
我假设"完全有序"你也意味着"一次一个".
在这种情况下,我相信有一个内置的解决方案应该做得很好:ConcurrentExclusiveSchedulerPair.
您的"父"调度程序将是并发调度程序:
TaskScheduler _parent = new ConcurrentExclusiveSchedulerPair(TaskScheduler.Default, 8)
.ConcurrentScheduler;
Run Code Online (Sandbox Code Playgroud)
并且"子"调度程序将是一个独占调度程序,它使用下面的并发调度程序:
var myScheduler = new ConcurrentExclusiveSchedulerPair(_parent).ExclusiveScheduler;
Run Code Online (Sandbox Code Playgroud)