【发布时间】:2010-11-29 03:42:35
【问题描述】:
据我从文档中可以看出,您应该检查消息队列中是否有消息的方法是使用 Peek 方法。然后,您依靠它失败并出现 MessageQueueException 来告诉您队列为空。
public bool IsQueueEmpty()
{
bool isQueueEmpty = false;
MessageQueue myQueue = new MessageQueue(".\\myQueue");
try
{
myQueue.Peek(new TimeSpan(0));
isQueueEmpty = false;
}
catch(MessageQueueException e)
{
if (e.MessageQueueErrorCode ==
MessageQueueErrorCode.IOTimeout)
{
isQueueEmpty = true;
}
}
return isQueueEmpty;
}
我一直被告知 - 并且经历过 - 例外是昂贵的,不应该用于正常操作。所以我的问题是:
我认为依靠捕获 MessageQueueException 是一项代价高昂的操作的假设是否正确?
有什么方法可以同步检查队列中是否有消息而不必依赖异常?
我正在使用 C# 中的 System.Messaging 命名空间,但如果我需要非托管来解决这个问题,这可能是一个选择。请注意,我想要一个不使用 WCF 和 MSMQ 的解决方案。
【问题讨论】:
标签: msmq