private V2MessageList CreateMessageList(int count, int startId = 1) { var result = new V2MessageList(); for (var i = 0; i < count; ++i) { result.Add(new V2Message("msg" + (startId + i), "1477297302", "messageType", "streamId", "message", 1)); } ; return(result); }
protected void ProcessMessageList(V2MessageList messageList) { if (messageList == null || _onMessage == null) { return; } foreach (var eventHandler in _onMessage.GetInvocationList()) { NotifyAsync((EventHandler <MessageEventArgs>)eventHandler, messageList); } }
private void Notify(EventHandler <MessageEventArgs> messageEventHandler, V2MessageList messageList) { foreach (var message in messageList) { TraceSource.TraceEvent( TraceEventType.Verbose, 0, "Notifying listener about message with ID \"{0}\" in stream \"{1}\"", (message as V2Message)?.Id, (message as V2Message)?.StreamId); try { messageEventHandler.Invoke(this, new MessageEventArgs(message)); } catch (Exception e) { TraceSource.TraceEvent( TraceEventType.Error, 0, "Unhandled exception caught when notifying listener about message with ID \"{0}\": {1}", message.Id, e); } } }
protected async void NotifyAsync(EventHandler <MessageEventArgs> messageEventHandler, V2MessageList messageList) { // Notify each handler in a separate task, maintaining the order of messages in the list, and // get back to reading the data feed again without waiting for listeners to process messages. Task task; if (_tasks.TryGetValue(messageEventHandler, out task)) { await task; } _tasks[messageEventHandler] = Task.Run(() => Notify(messageEventHandler, messageList)); }