gpt4 book ai didi

c# - 有限的并发任务调度器,可以交错任务以明确排序

转载 作者:行者123 更新时间:2023-11-30 13:37:02 28 4
gpt4 key购买 nike

我正在寻找一个 TaskScheduler :

  1. 允许我定义一些专用线程(例如 8 个)- 一个标准的 LimitedConcurrencyLevelTask​​Scheduler(使用线程池线程)或 WorkStealingTaskScheduler 执行此操作。
  2. 允许我创建完全有序的子 TaskScheduler,但在父调度程序的专用线程上安排任务。

目前,我们将 TaskScheduler.Default 用于通用池(受线程池增长算法等的影响)和 new OrderedTaskScheduler() 每当我们想要订购时任务。我想保留此行为,但将这两个要求都限制在我自己的专用线程池中。

QueuedTaskScheduler 似乎非常接近。我认为返回子 TaskScheduler 的 QueuedTaskScheduler.ActivateNewQueue() 方法会按顺序在父级的工作线程池上执行任务,但事实并非如此。子 TaskScheduler 似乎具有与父级相同的并行化级别。

我不一定希望子 taskscheduler 任务优先于父 taskscheduler 任务(尽管这在未来可能是一个不错的功能)。

我在这里看到一个相关的问题:Limited concurrency level task scheduler (with task priority) handling wrapped tasks但我的要求不需要处理异步任务(我所有排队的任务从头到尾都是完全同步的,没有延续)。

最佳答案

我假设“完全订购”也意味着“一次一个”。

在那种情况下,我相信有一个 built-in solution that should do quite well: ConcurrentExclusiveSchedulerPair .

您的“父”调度器将是并发调度器:

TaskScheduler _parent = new ConcurrentExclusiveSchedulerPair(TaskScheduler.Default, 8)
.ConcurrentScheduler;

“子”调度器将是一个独占调度器,它使用下面的并发调度器:

var myScheduler = new ConcurrentExclusiveSchedulerPair(_parent).ExclusiveScheduler;

关于c# - 有限的并发任务调度器,可以交错任务以明确排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26734893/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com