Я использую RabbitMQ для обеспечения потребления предметов из очереди. Мое приложение обрабатывается службой Windows, которое выполняется большую часть времени.RabbitMQ останавливается в ожидании сообщений
на обслуживание START (OnStart) Я с использованием метода
while (true)
{
var ea =(BasicDeliverEventArgs)consumer.Queue.Dequeue();
// ... Handle this item
}
Для того, чтобы потреблять элемент из очереди. Функция 'Dequeue()' блокируется. Поток будет заблокирован в этой строке, пока не появится какой-либо элемент.
Моя проблема начинается, когда я пытаюсь реализовать метод OnStop моего сервиса. Моя цель - прекратить ждать новых элементов, когда поступит сигнал OnStop. Итак, я модифицировал свой код примерно так:
while (true)
{
if (this.IsStopping)
return; // OnStop signal arrived. Stop waiting.
var ea =(BasicDeliverEventArgs)consumer.Queue.Dequeue();
// ... Handle this item
}
В некоторых случаях код выше работает нормально. НО, если очередь пуста, выполнение службы Windows не произойдет.
Как вы рекомендуете мне решить эту проблему?