Лучший способ отправлять сообщения на удаленный сервер - PullRequest
0 голосов
/ 11 мая 2018

Я ищу лучший способ отправки сообщений (с точки зрения производительности).

У меня есть цикл сообщений следующим образом:

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

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

У меня есть другие потоки, которые по желанию добавляют сообщения в очередь сообщений.Я хочу избежать Thread.Sleep (100), я думал о AutoResetEvent / ManualResetEvent (цикл сообщений будет ожидать сигнализацию из других потоков), но есть хорошие шансы для возникновения состояния гонки.

Примечание:Важное правило: каждое сообщение должно быть передано как можно быстрее.

Есть идеи?

Спасибо !!

1 Ответ

0 голосов
/ 11 мая 2018

Это хороший вариант использования для 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...