我使用任务库为我的图像压缩服务。我会压缩许多文件并发性。但是我希望服务只在用户空闲时运行(或者在程序中没有更多不重要的任务)。如何添加任务优先功能
我知道threadPool不支持“更改线程优先级”功能,所以任务也支持此功能。
我能制定控制的更高水平的功能呢?(的TaskScheduler优先级为例)
我使用任务库为我的图像压缩服务。我会压缩许多文件并发性。但是我希望服务只在用户空闲时运行(或者在程序中没有更多不重要的任务)。如何添加任务优先功能
我知道threadPool不支持“更改线程优先级”功能,所以任务也支持此功能。
我能制定控制的更高水平的功能呢?(的TaskScheduler优先级为例)
正如@zengr提到的,你可以使用一个优先级队列模式来解决这个问题。实际上有a good sample in MSDN实施优先级队列,每个优先级使用ConcurrentQueue<T>
实例,然后用自定义IProducerConsumerCollection<T>
实现包装实现,该实现从较高优先级队列中取下较低优先级队列中的项目。这种类型的实现使您的生产者可以确定应该有多少优先级,在添加项目时分配优先级,让消费者先处理优先级最高的项目,而不必理解优先级算法。
您可以为任务并行库创建自定义TaskScheduler
,然后通过将任务的实例传递给构造函数TaskFactory
来安排任务。
下面是如何做到这一点了一个例子:Task Scheduler with priority
实现优先级队列 – zengr 2010-11-01 09:57:32
zengr你能否澄清你对此有何评论? – Ivan 2010-11-01 10:03:57