Как мне изменить следующий блок кода, чтобы он не зависел от блока try / catch и IOTimeout.Эта функция вызывается каждые 1 минуту.поэтому я просто хочу обработать список идентификаторов, которые были поставлены в очередь после последнего вызова this.
Если бы я только получил нулевое значение, когда в очереди не было ожидающих сообщений, это решило бы мою проблему, кромеAPI http://msdn.microsoft.com/en-us/library/system.messaging.messagequeue.receive.aspx показывает, что все подписи получения являются синхронными (я не могу заблокировать поток) или с исключениями MessageQueueException, к которым я должен подключиться при помощи блока try / catch.Чего я хотел избежать после прочтения некоторой статьи, предлагающей не использовать try / catch для управления потоком программ.
#pragma warning disable
public void ConsumeEvents2()
{
var listOfJobs = new List<int>();
try {
while (true) {
// receive all messages and add in a list to process later
Message message = messageQueue.Receive(new TimeSpan(0,0,3));
JobEvent evt = (JobEvent)message.Body;
listOfJobs.Add(evt.DataNumber);
}
} catch (MessageQueueException e) {
if (e.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout) {
// process the numbers received
ProcessJobList(listOfJobs);
return;
}
throw;
}
}
#pragma warning restore