#c# #queue
#c# #очередь
Вопрос:
Я имею дело с аппаратным ресурсом, который может обрабатывать только 1 команду одновременно. Я собираюсь представить некоторые из его функций API через веб-интерфейс, поэтому, очевидно, есть большая вероятность, что одновременно будет отправлено более 1 команды. Я решил, что постановка этих команд в очередь при их отправке — лучший способ обеспечить последовательную обработку.
Я планирую реализовать очередь в статическом классе. Разработчик веб-приложения добавит команду, вызвав метод, соответствующий нужной команде. Я хочу, чтобы вызывающий метод ждал, пока не получит вывод своей команды, поэтому никакой асинхронной магии не требуется.
-
Правильно ли я это делаю? Есть ли способ лучше?
-
Как мне начать реализацию очереди в C # (я обычно работаю с Java)? Я предполагаю, что мне понадобится какое-то событие сортировки, чтобы сигнализировать о добавлении задания, и обработчик, чтобы инициировать обработку очереди…
Я использую .NET Framework 4.
Комментарии:
1. Можете ли вы изменить свой вопрос, чтобы уточнить, какую версию .NET вы используете? Это определит, можете ли вы использовать ConcurrentQueue (4.0 ) или Queue (2.0 ).
Ответ №1:
Вы можете использовать ConcurrentQueue
класс для своей реализации и иметь выделенный поток для обработки элементов в очереди.
Для части ожидания вы можете использовать AutoResetEvent
, производители передают экземпляр события в класс singleton вместе с запросом, затем вызывают WaitOne()
, который блокируется до тех пор, пока процессор не подаст сигнал о завершении обработки вызовом Set()
.
Комментарии:
1. Кажется, это именно то, что я искал. Спасибо за помощь!
Ответ №2:
Звучит как хороший подход, ЗА исключением: используйте класс Generic Queue collections. Не пишите свои собственные! Вы бы заново изобрели хорошо сконструированное колесо.