Реализация очереди в C#

#c# #queue

#c# #очередь

Вопрос:

Я имею дело с аппаратным ресурсом, который может обрабатывать только 1 команду одновременно. Я собираюсь представить некоторые из его функций API через веб-интерфейс, поэтому, очевидно, есть большая вероятность, что одновременно будет отправлено более 1 команды. Я решил, что постановка этих команд в очередь при их отправке — лучший способ обеспечить последовательную обработку.

Я планирую реализовать очередь в статическом классе. Разработчик веб-приложения добавит команду, вызвав метод, соответствующий нужной команде. Я хочу, чтобы вызывающий метод ждал, пока не получит вывод своей команды, поэтому никакой асинхронной магии не требуется.

  1. Правильно ли я это делаю? Есть ли способ лучше?

  2. Как мне начать реализацию очереди в C # (я обычно работаю с Java)? Я предполагаю, что мне понадобится какое-то событие сортировки, чтобы сигнализировать о добавлении задания, и обработчик, чтобы инициировать обработку очереди…

Я использую .NET Framework 4.

Комментарии:

1. Можете ли вы изменить свой вопрос, чтобы уточнить, какую версию .NET вы используете? Это определит, можете ли вы использовать ConcurrentQueue (4.0 ) или Queue (2.0 ).

Ответ №1:

Вы можете использовать ConcurrentQueue класс для своей реализации и иметь выделенный поток для обработки элементов в очереди.

Для части ожидания вы можете использовать AutoResetEvent , производители передают экземпляр события в класс singleton вместе с запросом, затем вызывают WaitOne() , который блокируется до тех пор, пока процессор не подаст сигнал о завершении обработки вызовом Set() .

Комментарии:

1. Кажется, это именно то, что я искал. Спасибо за помощь!

Ответ №2:

Звучит как хороший подход, ЗА исключением: используйте класс Generic Queue collections. Не пишите свои собственные! Вы бы заново изобрели хорошо сконструированное колесо.