Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向远程服务器发送消息的更好方法_C#_Multithreading_Performance - Fatal编程技术网

C# 向远程服务器发送消息的更好方法

C# 向远程服务器发送消息的更好方法,c#,multithreading,performance,C#,Multithreading,Performance,我正在寻找一种更好的方式来发送消息(性能方面) 我有如下消息循环: while (true) { if (_outboundMessages.Count == 0) { Thread.Sleep(100); continue; } var message = _outboundMessages.Dequeue(); SendMessage(message, _tra

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

我有如下消息循环:

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

     var message = _outboundMessages.Dequeue();
     SendMessage(message, _tradeStreamSSL);
  }
我有其他线程可以随意向消息队列添加消息。 我想避免使用Thread.Sleep(100),我考虑过AutoResetEvent/ManualResetEvent(消息循环将等待来自其他线程的信号),但很有可能出现争用条件

注意:需要记住的重要规则是,每一条消息都必须尽可能快地广播。

有什么想法吗


谢谢

这是一个很好的用例:

private BlockingCollection\u outboundMessages;
私有void ConsumerThread()
{
//这将阻止,直到新消息排队
foreach(在_outboundMessages.GetConsumingEnumerable()中的变量项)
{
SendMessage(message,_tradeStreamSSL);
}
}

我不知道消息什么时候会出现。这与用户无关。
private BlockingCollection<Message> _outboundMessages;

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