Обработка очереди элементов асинхронно в C #
Я пытаюсь создать систему, которая обрабатывает очередь работы. Система имеет следующие технические характеристики:
Система состоит из двух компонентов: рабочего и рабочего.Существует установленный верхний предел количества работающих одновременно. Этот верхний предел больше единицы.Чтобы избежать проблем, связанных с выполнением одной и той же задачи дважды, существует только один назначитель работы.Какой дизайн вы бы использовали для создания такой системы? Вот что я думаю:
Создать коллекцию очередей, по одной очереди на каждого работникаСоздайте таймер для рабочего задания. Его работа заключается в заполнении очередей.Создайте таймер для каждого работника, передавая объект очереди в качестве состояния объекта для представления его рабочей нагрузки.Удалить и добавить в очереди, пока они заблокированы.Используйте счетчик, который увеличивается и уменьшается при блокировке, чтобы гарантировать, что одновременно выполняется не более указанного числа рабочих задач.Я чувствую, что должен быть лучший способ сделать это. Чтобы вы посоветовали? Должен ли я перейти с таймеров на потоки для рабочих? Должны ли потоки просто вращаться / ждать, пока очередь пуста? Должны ли потоки закрываться, и рабочий назначитель может условно создать новый?