我正在寻找一种更好的方式来发送消息(性能方面)。
我有如下消息循环:
while (true)
{
if (_outboundMessages.Count == 0)
{
Thread.Sleep(100);
continue;
}
var message = _outboundMessages.Dequeue();
SendMessage(message, _tradeStreamSSL);
}
我有其他线程随意向消息队列添加消息。我想避免 Thread.Sleep(100),我想到了 AutoResetEvent/ManualResetEvent(消息循环将等待来自其他线程的信号),但是很有可能发生竞争条件。
注意:要记住的重要规则是,每条消息都必须尽快广播。
有任何想法吗?
谢谢!!
这是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);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句