5

我将任务库用于我的图像压缩服务。我会压缩许多文件并发。但我希望服务仅在用户空闲时运行(或程序中不再有重要的任务)。

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

我可以在更高级别的控制上开发该功能吗?(例如 TaskScheduler 优先级)

4

2 回答 2

4

正如@zengr 提到的,您可以使用优先队列模式来解决这个问题。实际上,MSDN中有一个很好的示例,它使用每个优先级的实例来实现优先级队列ConcurrentQueue<T>,然后使用自定义IProducerConsumerCollection<T>实现来包装它,该实现先从较高优先级队列中提取项目,然后再从较低优先级队列中提取项目。这种类型的实现使您的生产者能够确定应该有多少优先级,在添加项目时分配优先级,并让您的消费者首先处理具有最高优先级的项目,而无需了解优先级算法。

于 2010-11-03T01:05:03.973 回答
2

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

以下是如何做到这一点的一个示例:具有优先级的任务计划程序

于 2010-11-25T07:33:29.187 回答