我有以下模式:
Multiples线程正在向ConcurrentQueue发送消息,该消息由单个线程经销商轮询,以便将消息发送到路由器。
发送多个邮件时会引发以下异常:
“SocketException - 无法执行非阻塞套接字操作 完成了“
以下是将消息出列并将其发送给经销商的线程代码:
Task.Factory.StartNew((state) =>
{
using (NetMQSocket dealerSocket = new DealerSocket(_connectionString))
using (NetMQPoller poller = new NetMQPoller() { dealerSocket })
{
dealerSocket.ReceiveReady += DealerSocketOnReceiveReady;
poller.RunAsync();
while (true)
{
Message<T> message;
if (!_concurrentQueue.TryDequeue(out message)) continue;
_pendingRequests.Add(message.Id, message);
var mpm = new NetMQMessage(4);
mpm.AppendEmptyFrame();
mpm.Append(message.Body);
mpm.AppendEmptyFrame();
mpm.Append(message.Id.ToString());
dealerSocket.SendMultipartMessage(mpm);
}
}
}, TaskCreationOptions.LongRunning, _cancellationTokenSource.Token);
发送MultipartMessage
时发生SocketException我试图增加SendBuffer大小和/或SendHighWatermark大小,但我仍然有同样的错误。
我是否需要处理此异常并重置套接字,否则我永远不应该处于这种情况?
答案 0 :(得分:0)
dealerSocket用于2个主题:main&amp;轮询。 为了仅在一个线程中使用dealerSocket,我们使用了NetMQQueue。
更多详情here