【问题标题】:Better way to dispatch messages to remote server将消息发送到远程服务器的更好方法
【发布时间】:2018-10-21 18:44:58
【问题描述】:

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

我的消息循环如下:

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

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

我有其他线程随意将消息添加到消息队列中。 我想避免 Thread.Sleep(100),我考虑过 AutoResetEvent/ManualResetEvent(消息循环将等待来自其他线程的信号),但很有可能发生竞争条件。

注意:要记住的重要规则,每条消息都必须尽快广播。

有什么想法吗?

谢谢!!

【问题讨论】:

  • 我不知道消息什么时候会出现。这与用户无关。

标签: c# multithreading performance


【解决方案1】:

这是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);
    }
}

【讨论】:

    猜你喜欢
    • 2019-06-14
    • 2012-07-25
    • 2019-01-21
    • 2015-03-24
    • 2010-12-20
    • 2012-05-20
    • 1970-01-01
    • 2019-07-28
    • 2013-06-05
    相关资源
    最近更新 更多