【发布时间】:2012-02-16 17:23:20
【问题描述】:
我目前正在使用此处详细介绍的 LimitedConcurrencyLevelTaskScheduler http://msdn.microsoft.com/en-us/library/ee789351.aspx
我想加强这一点,以便可以为个人任务分配优先级。这些优先级不需要映射到线程优先级。它应该只影响任务启动的顺序。
有谁知道这样一个任务调度器的例子吗? (很多日程安排的事情都在我头上,所以如果有现成的解决方案那就太好了)
【问题讨论】:
-
该调度程序使用 LinkedList
作为队列。尝试将其更改为 SortedList 其中 T 是一个结构,其中包含一个 Task 和一个整数作为优先级,并在 T.Priority 上对列表进行排序。 -
@IgbyLargeman - SortedList 可能不是一个理想的解决方案 - 键(优先级)必须是唯一的。大多数优先级系统只有几个级别,并且允许为多个项目分配相同的优先级
-
这是个坏主意。具有内部一组(数组)队列的队列 - 每个优先级一个 - 是一种更好的方法。优先级不是唯一的,并且仅限于少数几个。也不要使用链表——我有一个“队列”,它在内部使用 4096 个元素的数组,外加 opointers。更少的分配 - 项目从前面的“页面”中删除,添加到 nd。更少的分配,更少的垃圾收集。
-
@Damien_The_Unbeliever:说得好。不知何故,我在想 SortedList 可能有重复的键。高级时刻...
-
如果您对带有仅异步 API 的
PrioritySemaphore感兴趣,请查看 here。
标签: c# .net task-parallel-library