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

我目前正在使用这里详细介绍的LimitedConcurrencyLevelTask​​Scheduler http://msdn.microsoft.com/en-us/library/ee789351.aspx

我希望对此进行增强,以便为个人任务分配优先级。 这些优先级不需要映射到线程优先级。 它应该只影响任务的启动顺序。

有谁知道这样一个任务调度程序的例子? (很多调度的东西都在我头上,所以如果有现有的解决方案会很棒)

Parallel Extensions Extras Samples。 已经提供了这样的调度程序QueuedTaskScheduler。 此调度程序提供优先级,并发限制,公平性和对所用线程的类型和优先级的细粒度控制。 当然,您不必使用或配置您不需要的function。

Stephen Toub在此提供了Parallel Extensions Extras中各种调度程序的简要说明

要使用QueuedTaskScheduler,可以使用所需的优先级调用其ActivateNewQueue方法。 此方法返回由父TaskScheduler管理的新TaskScheduler派生的Queue对象。 所有使用特定队列的任务都由父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); 

对任务列表使用某些排序或优先级数据结构。 然后创建自己的添加,其中包含优先级。 这可能不如其他人好,但它会优先考虑任务列表。 您可以在那里重用99%的代码。 只需将LinkedList替换为Sorted列表,或使用LINQ对具有优先级的方法add进行排序和编写。