我希望能够读取和处理来自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();
}
}
}
其中
queue
是System.Messaging.MessageQueue
。我想让循环使用
while (!cancelled)
,这意味着调用queue.Receive
接受超时的重载。但是,代码会在达到超时时抛出,并且抛出如此多的异常不是一件好事。是否有与TryRecieve
类似的Monitor.TryEnter
?偷看似乎是最接近的,但在达到超时时也会抛出。如果我想从队列中读取高吞吐量并提供取消支持,那么从队列中读取的最佳方法是什么?
最佳答案
这不是一个直接的答案,但是我会在WCF中使用net.msmq协议来执行messageQ处理。这是一种简洁的方法,可以满足您在此处提到的所有方案。