private void StartEvents(Stream stream, string eventName = null, bool exactMatch = false) { // create an event so reader can signal emitter AutoResetEvent emitterWaitHandle = new AutoResetEvent(true); // instantiate the stream reader and event emitter reader = new EventStreamReader(stream, queue, emitterWaitHandle); emitter = new EventStreamEmitter(queue, this.raiseEvent, emitterWaitHandle, eventName, exactMatch); // start the task reader : stream -> queue taskReader = Task.Factory.StartNew(() => { Thread.CurrentThread.Name = "StreamReader"; reader.DoWork(); }, TaskCreationOptions.LongRunning); // start the task emitter : queue -> events taskEmitter = Task.Factory.StartNew(() => { Thread.CurrentThread.Name = "Event Emitter"; emitter.DoWork(); }, TaskCreationOptions.LongRunning); }