C# ZMQ NetMQ-无法完成非阻塞套接字操作
我有以下模式: 多线程向ConcurrentQueue发送消息,该队列由单线程经销商轮询,以便向路由器发送消息 发送多条消息时引发以下异常: “SocketException-无法执行非阻塞套接字操作 已完成” 以下是退出消息队列并将其发送给经销商的线程的代码:C# ZMQ NetMQ-无法完成非阻塞套接字操作,c#,sockets,zeromq,netmq,C#,Sockets,Zeromq,Netmq,我有以下模式: 多线程向ConcurrentQueue发送消息,该队列由单线程经销商轮询,以便向路由器发送消息 发送多条消息时引发以下异常: “SocketException-无法执行非阻塞套接字操作 已完成” 以下是退出消息队列并将其发送给经销商的线程的代码: Task.Factory.StartNew((state) => { using (NetMQSocket dealerSocket = new DealerSocket(_connecti
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);
Task.Factory.StartNew((状态)=>
{
使用(NetMQSocket dealerSocket=new dealerSocket(_connectionString))
使用(NetMQPoller poller=new NetMQPoller(){dealerSocket})
{
dealerSocket.ReceiveReady+=DealerSocketOnReceiveReady;
poller.RunAsync();
while(true)
{
信息;
如果(!\u concurrentQueue.TryDequeue(out消息))继续;
_pendingRequests.Add(message.Id,message);
var mpm=新的NetMQMessage(4);
mpm.AppendEmptyFrame();
mpm.Append(message.Body);
mpm.AppendEmptyFrame();
Append(message.Id.ToString());
dealerSocket.SendMultipartMessage(mpm);
}
}
},TaskCreationOptions.LongRunning,_cancellationTokenSource.Token);
发送MultipartMessage时发生SocketException
我已尝试增加SendBuffer大小和/或SendHighWatermark大小,但仍有相同的错误
我是否需要处理此异常并重置套接字,或者我永远不应该出现在这种情况下?dealerSocket用于两个线程:main和poller。 为了只在一个线程中使用dealerSocket,我们使用了NetMQQueue
更多详细信息dealerSocket在两个线程中使用:main和poller。 为了只在一个线程中使用dealerSocket,我们使用了NetMQQueue 更多细节