我正在寻找更好的发送消息的方式(性能方面)。
我的消息循环如下:
while (true)
{
if (_outboundMessages.Count == 0)
{
Thread.Sleep(100);
continue;
}
var message = _outboundMessages.Dequeue();
SendMessage(message, _tradeStreamSSL);
}
我有其他线程可以随意向消息队列添加消息。 我想避免使用Thread.Sleep(100),我想到了AutoResetEvent / ManualResetEvent(消息循环将等待其他线程的信令),但是竞争条件很有可能发生。
注意:要记住重要规则,每封邮件都必须尽快播出。
有什么想法吗?
谢谢!
答案 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);
}
}