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

ZMQ NetMQ - A non-blocking socket operation could not be completed

我有以下模式:

多个线程正在将消息发送到由单线程 Dealer 轮询的 ConcurrentQueue,以便将消息发送到 Router

发送多条消息时出现以下异常:

"SocketException - A non-blocking socket operation could not be completed"

这是将消息出队并将其发送给经销商的线程代码:

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 大小 and/or SendHighWatermark 大小,但我仍然遇到相同的错误。

我是否需要处理此异常并重置套接字,或者在这种情况下我不应该这样做?

dealerSocket 在 2 个线程中使用:main 和 poller。 为了仅在一个线程中使用 dealerSocket,我们使用了 NetMQQueue。

更多详情here