Как добавить задачи приоритетной функциональности - PullRequest
5 голосов
/ 01 ноября 2010

Я использую библиотеку задач для службы сжатия изображений. Я бы сжал много файлов одновременно. Но я хочу, чтобы служба запускалась только тогда, когда пользователь бездействует (или не выполняет более важных задач в программе).

Я знаю, что threadPool не поддерживает функцию «изменить приоритет потока», поэтому задача также поддерживает эту функцию.

Могу ли я развить эту функциональность на более высоком уровне управления? (Например, приоритет TaskScheduler)

Ответы [ 2 ]

4 голосов
/ 03 ноября 2010

Как уже упоминалось @zengr, вы можете использовать шаблон очереди приоритетов для решения этой проблемы.На самом деле хороший пример в MSDN реализации приоритетных очередей с использованием ConcurrentQueue<T> экземпляров для каждого приоритета и последующего переноса в пользовательскую реализацию IProducerConsumerCollection<T>, которая отбираетиз очереди с более высоким приоритетом перед более низкими.Этот тип реализации позволяет вашему производителю определять, сколько должно быть приоритетов, назначать приоритет при добавлении элемента и позволяет вашему потребителю сначала работать с элементами с наивысшим приоритетом без необходимости когда-либо понимать алгоритм приоритетов.

2 голосов
/ 25 ноября 2010

Вы можете создать пользовательский TaskScheduler для библиотеки параллелей задач, а затем запланировать задачи для него, передав его экземпляр конструктору TaskFactory.

Вот один пример того, как это сделать: Планировщик заданий с приоритетом

...