将消息分发到远程服务器的更好方法

时间:2018-05-11 10:58:21

标签: c# multithreading performance

我正在寻找更好的发送消息的方式(性能方面)。

我的消息循环如下:

 while (true)
 {                    
     if (_outboundMessages.Count == 0)
     {
         Thread.Sleep(100);
         continue;
     }

     var message = _outboundMessages.Dequeue();
     SendMessage(message, _tradeStreamSSL);
  }

我有其他线程可以随意向消息队列添加消息。 我想避免使用Thread.Sleep(100),我想到了AutoResetEvent / ManualResetEvent(消息循环将等待其他线程的信令),但是竞争条件很有可能发生。

注意:要记住重要规则,每封邮件都必须尽快播出。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

这是BlockingCollection的一个很好的用例:

private BlockingCollection<Message> _outboundMessages;

private void ConsumerThread()
{
    // This will block until new messages are queued
    foreach (var item in _outboundMessages.GetConsumingEnumerable())
    {
        SendMessage(message, _tradeStreamSSL);
    }
}