2013-10-24 50 views
4

我無法理解clrzmq(3.0.0 rc1)Socket.ReceiveReady事件。在地道的C#代碼,我希望註冊一個事件處理程序,然後坐下來等待處理程序被稱爲:clrzmq未引發Socket.ReceiveReady事件

socket.ReceiveReady += (o, e) => Console.WriteLine ("Success!"); 

但是此事件從未提出,除非我還積極投票:

var poller = new Poller(new[] {socket}); 
while (true) { 
    poller.Poll(); 
} 

這對我來說完全違反直覺:我應該輪詢(即使用基於拉的模型)或偵聽事件(即使用基於推的模型)。

所以,這是真正的方法,還是我錯過了更簡單的東西?

回答

4

是的,這似乎是正確的做法。在NetMQ中,這些事件僅由NetMQSocket.Poll()Poller.Start()調用。輪詢是需要的,因爲需要一個專用線程來處理來自套接字的消息。