我使用任务库进行图像压缩服务。我想压缩许多文件的并发性。但是我希望服务仅在用户空闲时运行(或者在程序中没有更多的任务)。
我知道threadPool不支持“更改线程优先级”功能,因此任务也支持此功能。
我可以在更高级别的控制上开发该功能吗?(例如,TaskScheduler优先级)
答案 0 :(得分:4)
正如@zengr所提到的,您可以使用优先级队列模式来解决此问题。实际上a good sample in MSDN实现优先级队列,每个优先级使用ConcurrentQueue<T>
个实例,然后使用自定义IProducerConsumerCollection<T>
实现将其包装,该实现在较低优先级队列之前提取项目。这种类型的实现使您的生产者能够确定应该有多少优先级,在添加项目时分配优先级,并让您的消费者首先处理具有最高优先级的项目,而无需了解优先级算法。
答案 1 :(得分:2)
您可以为任务并行库创建自定义TaskScheduler
,然后通过将其实例传递给TaskFactory
构造函数来计划任务。
以下是如何执行此操作的一个示例:Task Scheduler with priority