【发布时间】:2015-05-24 21:59:16
【问题描述】:
我正在编写一个从 Microsoft 消息队列 (MSMQ) 中窥视消息的应用程序。我希望我的应用程序依次查看 MSMQ 消息(从第一条消息到最后一条消息)。在完全窥视完最后一条消息后,主线程将被阻塞,直到 MSMQ 有新消息到达。
我已经使用 MessageQueue.Peek(TimeSpan, Cursor, PeekAction) 方法和 TimeSpan=MessageQueue.InfiniteTimeout 并且有一个问题:MessageQueue.InfiniteTimeout 值大约 49 天,但我希望我的应用程序会等待很长时间(大约 1000 天)的新消息,我已经切换 TimeSpan = TimeSpan.MaxValue 但没有成功。你能给我一些解决方案或建议吗?谢谢!
我的代码是这样的:
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);
}
【问题讨论】:
-
简单的超时重试怎么样?
-
你能解释一下如何在超时时重试吗?我真的不知道该怎么办。如果你能帮助我,请写在答案部分。谢谢!
-
见 Thomas Jaskula 的回答。
标签: c# msmq timespan peekmessage