2010-11-01 61 views
5

我使用任务库为我的图像压缩服务。我会压缩许多文件并发性。但是我希望服务只在用户空闲时运行(或者在程序中没有更多不重要的任务)。如何添加任务优先功能

我知道threadPool不支持“更改线程优先级”功能,所以任务也支持此功能。

我能制定控制的更高水平的功能呢?(的TaskScheduler优先级为例)

+0

实现优先级队列 – zengr 2010-11-01 09:57:32

+0

zengr你能否澄清你对此有何评论? – Ivan 2010-11-01 10:03:57

回答

4

正如@zengr提到的,你可以使用一个优先级队列模式来解决这个问题。实际上有a good sample in MSDN实施优先级队列,每个优先级使用ConcurrentQueue<T>实例,然后用自定义IProducerConsumerCollection<T>实现包装实现,该实现从较高优先级队列中取下较低优先级队列中的项目。这种类型的实现使您的生产者可以确定应该有多少优先级,在添加项目时分配优先级,让消费者先处理优先级最高的项目,而不必理解优先级算法。

2

您可以为任务并行库创建自定义TaskScheduler,然后通过将任务的实例传递给构造函数TaskFactory来安排任务。

下面是如何做到这一点了一个例子:Task Scheduler with priority