public void Run() { subscriber.Connect("inproc://events"); subscriber.SetOption(ZSocketOption.SUBSCRIBE, ""); event_socket.SetOption(ZSocketOption.IDENTITY, "event-" + ident); event_socket.Connect("tcp://127.0.0.1:8080"); async_socket.SetOption(ZSocketOption.IDENTITY, "async-" + ident); async_socket.Connect("tcp://127.0.0.1:8080"); ZError error = default(ZError); ZMessage[] messages = null; ZSocket[] sockets = new ZSocket[] { subscriber, event_socket, async_socket }; ZPollItem[] polls = new ZPollItem[] { ZPollItem.Create(SubscriberHandler), ZPollItem.Create(EventHandler), ZPollItem.Create(AsyncHandler) }; async_socket.Send(new ZFrame(async_socket.IdentityString)); try { while (!cancel.IsCancellationRequested) { if (!sockets.Poll(polls, ZPoll.In, ref messages, out error, TimeSpan.FromMilliseconds(500))) { if (error == ZError.EAGAIN) { Thread.Sleep(1); continue; } if (error == ZError.ETERM) { break; } throw new ZException(error); } } } catch (ZException) { if (!cancel.IsCancellationRequested) { throw; } } subscriber.Dispose(); event_socket.Dispose(); async_socket.Dispose(); }