我有单个套接字,它在发送帧时被阻止,我想处理轮询器(以及与之相关的所有内容)。但是,我做不到——在套接字上调用 dispose 会引发异常,而在 poller 上调用 dispose 会完全阻塞。
请注意,我正在使用SendFrame
并且可以使用TrySendFrame
,但是这个示例的目的是实际阻塞套接字并找到一种方法来清理所有内容。
例子:
private Program()
{
const string address = "tcp://localhost:5000";
var socket = new DealerSocket();
socket.Options.SendHighWatermark = 1;
socket.Options.Identity = Encoding.ASCII.GetBytes(Guid.NewGuid().ToString("N"));
socket.Connect(address);
var poller = new NetMQPoller();
poller.Add(socket);
socket.SendReady += OnSendReady;
poller.RunAsync();
Thread.Sleep(5000);
Console.WriteLine("Disposing");
poller.Dispose(); // get stuck on this one
Console.WriteLine("Disposed");
}
private void OnSendReady(object sender, NetMQSocketEventArgs e)
{
Console.WriteLine("0");
e.Socket.SendFrame("hello");
Console.WriteLine("1");
e.Socket.SendFrame("hello"); // this will block
Console.WriteLine("2");
}
使用 NetMQ 3.3.3.4(我现在的主要版本)和 4.0.0.1 进行了测试。