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

我想对此进行增强,以便可以为单个任务分配优先级。这些优先级不必映射到线程优先级。它只应影响任务开始的顺序。

有人知道这样的任务计划程序的示例吗? (很多计划工作都在我头上,所以如果有现有的解决方案,那就太好了)

最佳答案

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

Stephen Toub在Parallel Extensions Extras here中简要介绍了各种调度程序

若要使用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);

10-08 14:07