//processing methods protected virtual void DequeueAll() { while (CanContinue()) { SignalWrapper <SignalEvent <TKey> > item = _eventQueue.DequeueNext(); if (item == null) { break; } StartNextTask(() => ProcessSignal(item)); } WaitForCompletion(); }