Реализация очереди в C # - PullRequest
7 голосов
/ 02 июня 2011

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

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

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

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

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

Ответы [ 2 ]

10 голосов
/ 02 июня 2011

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

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

6 голосов
/ 02 июня 2011

Звучит как хороший подход ИСКЛЮЧИТЬ : используйте класс коллекций Generic Queue. Не пишите свое! Вы бы заново изобрели хорошо сложенное колесо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...