我希望能够读取和处理来自MSMQ的消息。队列是事务性的。我目前正在使用此代码:

while (true)
{
    using (var txn = new MessageQueueTransaction())
    {
        txn.Begin();

        try
        {
            var message = queue.Receive(txn);
            Dispatch(message);

            txn.Commit();
        }
        catch (MessageQueueException ex)
        {
            txn.Abort();
        }
    }
}


其中queueSystem.Messaging.MessageQueue

我想让循环使用while (!cancelled),这意味着调用queue.Receive接受超时的重载。但是,代码会在达到超时时抛出,并且抛出如此多的异常不是一件好事。是否有与TryRecieve类似的Monitor.TryEnter?偷看似乎是最接近的,但在达到超时时也会抛出。

如果我想从队列中读取高吞吐量并提供取消支持,那么从队列中读取的最佳方法是什么?

最佳答案

这不是一个直接的答案,但是我会在WCF中使用net.msmq协议来执行messageQ处理。这是一种简洁的方法,可以满足您在此处提到的所有方案。

07-25 23:33