Я пишу приложение, которое просматривает сообщение из Microsoft Message Queue (MSMQ). Я хочу, чтобы мое приложение просматривало сообщения MSMQ поочередно (от первого сообщения до последнего сообщения). После полного просмотра последнего сообщения основной поток будет заблокирован до появления сообщения MSMQ.
Я уже использовал MessageQueue.Peek (TimeSpan, Cursor, PeekAction) Метод с TimeSpan = MessageQueue.InfiniteTimeout и есть проблема: значение MessageQueue.InfiniteTimeout приблизительно 49 дней, но я хочу, чтобы мое приложение будет ждать нового сообщения с очень долгое время (около 1000 дней), я уже переключил TimeSpan = TimeSpan.MaxValue, но не добился успеха. Не могли бы вы дать мне несколько решений или советов? благодаря!
Мой следующий код:
Сообщение Peek MSMQ с неограниченным таймаутом
while (true) {
if (isTheFirst) {
try {
ret = mq.Peek(MessageQueue.InfiniteTimeout, cursor, PeekAction.Current);
Console.WriteLine(ret.Id);
isTheFirst = false;
} catch (MessageQueueException e) {
// what can we do?
}
} else {
try {
// because MessageQueue.InfiniteTimeout value approximate 49 days, so if
// during 49 days, Message Queue didn't receive any message, my app will
// thrown exception but i want my app to continue wait for new message arrive
ret = mq.Peek(MessageQueue.InfiniteTimeout, cursor, PeekAction.Next);
Console.WriteLine(ret.Id);
} catch (MessageQueueException ex) {
// what can we do?
}
}
Thread.Sleep(1000);
}
Как насчет простой повторной попытки по таймауту? –
Можете ли вы объяснить мне, как повторить попытку? Я действительно не знаю, как это сделать. Если вы можете мне помочь, напишите в разделе ответа. Спасибо! – GIANGPZO
См. Ответ Томаса Яскулы. –