Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ZMQ NetMQ-无法完成非阻塞套接字操作_C#_Sockets_Zeromq_Netmq - Fatal编程技术网

C# ZMQ NetMQ-无法完成非阻塞套接字操作

C# ZMQ NetMQ-无法完成非阻塞套接字操作,c#,sockets,zeromq,netmq,C#,Sockets,Zeromq,Netmq,我有以下模式: 多线程向ConcurrentQueue发送消息,该队列由单线程经销商轮询,以便向路由器发送消息 发送多条消息时引发以下异常: “SocketException-无法执行非阻塞套接字操作 已完成” 以下是退出消息队列并将其发送给经销商的线程的代码: Task.Factory.StartNew((state) => { using (NetMQSocket dealerSocket = new DealerSocket(_connecti

我有以下模式:

多线程向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);
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

更多细节