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