我可以偷看空MSMQ而不会出现异常吗?

据我在文档中看到,您应该检查消息队列中是否有消息的方式是使用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;
    }

我总是被告知 – 并且经历过 – Exeptions价格昂贵,不应该用于正常操作.所以我的问题是:

>我依赖捕获MessageQueueException的假设是否代价高昂?
>有没有办法同步检查队列中是否有消息而不必依赖异常?

我正在使用C#中的System.Messaging命名空间,但是如果我需要不受管理来解决这个问题,那么这可能是一个选项.请注意,我想要一个不使用WCF和MSMQ的解决方案.

最佳答案
更新:我并不认为性能不重要.但我认为与异常相比,进程间通信非常昂贵.

更新前:

>我认为在进程间通信(这是msmq所做的)的上下文中,异常的成本并不重要.测试你是否想要确定.
>我不这么认为.

转载注明原文:我可以偷看空MSMQ而不会出现异常吗? - 代码日志