我无法理解clrzmq(3.0.0 rc1)Socket.ReceiveReady事件。在惯用的C#代码中,我希望注册一个事件处理程序,然后坐下来等待处理程序被调用:
socket.ReceiveReady += (o, e) => Console.WriteLine ("Success!");
然而,除非我也积极地进行民意调查,否则这个事件永远不会被提出:
var poller = new Poller( new[] {socket} );
while (true) {
poller.Poll();
}
这对我来说完全违反直觉:我应该轮询(即使用基于拉的模型)或者监听事件(即使用基于推送的模型)。
那么,这真的是正确的方法,还是我错过了更简单的东西?
答案 0 :(得分:4)
是的,这似乎是正确的方法。在NetMQ中,这些事件仅由NetMQSocket.Poll()
和Poller.Start()
调用。需要轮询,因为需要一个专用线程来处理来自套接字的消息。