.Net TPL:具有任务优先级的有限并发级别任务调度程序?

2024-03-29

我目前正在使用 LimitedConcurrencyLevelTask​​Scheduler,详细信息请参见此处http://msdn.microsoft.com/en-us/library/ee789351.aspx http://msdn.microsoft.com/en-us/library/ee789351.aspx

我想增强这一点,以便可以为个人任务分配优先级。这些优先级不需要映射到线程优先级。它应该只影响任务启动的顺序。

有谁知道这样的任务调度程序的例子吗? (很多调度的事情超出了我的能力,所以如果有一个现有的解决方案那就太好了)


The 并行扩展额外示例。 http://code.msdn.microsoft.com/ParExtSamples已经提供了这样的调度程序,QueuedTaskScheduler。该调度程序提供优先级、并发限制、公平性以及对所使用线程的类型和优先级的细粒度控制。当然,您不必使用或配置不需要的功能。

Stephen Toub 在并行扩展附加中提供了各种调度程序的简要描述here http://blogs.msdn.com/b/pfxteam/archive/2010/04/09/9990424.aspx

要使用 QueuedTaskScheduler,您可以使用所需的优先级调用其 ActivateNewQueue 方法。此方法返回一个新的 TaskScheduler 派生的 Queue 对象,该对象由父 TaskScheduler 管理。所有使用特定队列的任务都由父 TaskScheduler 根据其优先级进行调度。

以下代码创建一个最大并发级别为 4 的调度程序、两个优先级队列,并在第一个队列上调度一个任务:

QueuedTaskScheduler qts = new QueuedTaskScheduler(TaskScheduler.Default,4);
TaskScheduler pri0 = qts.ActivateNewQueue(priority: 0);
TaskScheduler pri1 = qts.ActivateNewQueue(priority: 1);

Task.Factory.StartNew(()=>{ }, 
                      CancellationToken.None, 
                      TaskCreationOptions.None, 
                      pri0);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.Net TPL:具有任务优先级的有限并发级别任务调度程序? 的相关文章

随机推荐