消息队列循环

问题描述 投票:4回答:3

我在C#中有一个控制台应用程序,我试图从消息队列中接收消息,直到消息队列为空。像这样,

MessageQueue queue = new MessageQueue();
While(queue.notempty)
{
    queue.receive(...)
}

我该怎么做?

谢谢。

c# msmq
3个回答
5
投票

无法检查队列是否为空。您必须以这种方式接收它:

private Message Receive(MessageQueue queue)
{
   try 
   {
      return queue.Receive(TimeSpan.Zero);
   }
   catch (MessageQueueException mqe)
   {
      if (mqe.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout)
         return null;
      throw;
   }
}

然后您可以做

MessageQueue queue = new MessageQueue();
Message msg;
while( (msg = Receive(queue)) != null)
{
    //process
}

0
投票

如果您在C#中执行此操作,则Queue<T>类应该起作用:

Queue<T>

如果您打算从多个线程填充队列,则可以考虑改用Queue<Message> queue = GetMessageQueue(); while(queue.Count > 0) { Message message = queue.Dequeue(); // process message } (或ConcurrentQueue<T>)。


如果您将ConcurrentQueue<T>类用于MSMQ,则始终可以使用:

BlockingCollection<T>

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.