ZeroMQ socket Recv()抛出'Context is terminated'异常 - 为什么以及如何恢复?

Bra*_*don 5 c# zeromq

使用ZMQ.SocketType.REP(回复)消息传递套接字与ZeroMQ,我收到消息,然后发回"确定"消息.

现在,我正在本地尝试(从同一台机器上运行的同一个C#控制台应用程序发送/接收消息).

相当经常(大约1500条消息后),该行:

var receivedBytes = _recvSocket.Recv();

......会抛出异常: Context was terminated

我的问题是,为什么会发生这种情况,你如何从中恢复

我有一个System.Threading.Thread致力于运行我的"服务器端"ZeroMQ回复套接字,这是它运行的循环:

    private static void MessagingLoopReceive(object state)
    {
        if (_zmqc == null)
        {
            _zmqc = new ZMQ.Context(1);
        }

        _recvSocket = _zmqc.Socket(ZMQ.SocketType.REP);
        _recvSocket.Bind("tcp://*:5556");

        while (true)
        {
            if (_queueStop)
            {
                break;
            }

            //Console.WriteLine("Server blocking for receive...");
            var receivedBytes = _recvSocket.Recv();

            if (receivedBytes != null && receivedBytes.Length > 0)
            {
                //Console.WriteLine("Server message received from client, sending OK");
                _recvSocket.Send("OK", Encoding.ASCII);
                //Console.WriteLine("Server OK sent, adding message to queue");
                _queuedMessages.Enqueue(receivedBytes);
            }
            else
            {
                Thread.Sleep(1);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

小智 8

这意味着有人(垃圾收集器?)关闭了上下文.