Как добавить задачи приоритетные функциональные возможности
-
28-09-2019 - |
Вопрос
Я использую библиотеку задач для моего сжатия изображения. Я бы сжать множество файлов параллелизма. Но я хочу, чтобы сервис проводился только тогда, когда пользователь простаивает (или не более нечувствителенную задачу в программе).
Я знаю, что Threadpool не поддерживает функцию «Изменить приоритетную тему», поэтому задача также поддерживает эту функцию.
Могу ли я развить эту функциональность на более высоком уровне контроля? (Например, приоритет задачCheduler)
Решение
Как упоминалось @zengr, вы можете использовать приоритетный шаблон очереди, чтобы решить эту проблему. Есть на самом деле Хороший образец в MSDN реализации приоритетных очередей с использованием ConcurrentQueue<T>
экземпляры на приоритет, а затем упаковывая, что с помощью обычай IProducerConsumerCollection<T>
Реализация, которая тянет элементы из более высокой очереди приоритета до более низких. Этот тип реализации позволяет вашему производителю определять, сколько должно быть приоритетов, назначить приоритет при добавлении элемента и позволяет вашему потребителю работать на элементах с наивысшим приоритетом, сначала, не понимая, что приоритетного приоритета.
Другие советы
Вы можете создать пользовательский TaskScheduler
для параллельной библиотеки задачи, а затем расписание задач на это, передавая экземпляр его к TaskFactory
конструктор.
Вот один пример того, как это сделать: Планировщик задач с приоритетом