예제 #1
0
 public void Queue(IPayloadProvider queueData)
 {
     _enqueuedPayloadQueues.Enqueue(queueData);
     if (_currentPayloadQueue.IsFinished() && _enqueuedPayloadQueues.Count == 1)
     {
         ProcessNext();
     }
 }
예제 #2
0
 private void ProcessNext()
 {
     Message.Unsubscribe(this);
     while (_currentPayloadQueue.IsFinished() && _enqueuedPayloadQueues.Count > 0)
     {
         _currentPayloadQueue = _enqueuedPayloadQueues.Dequeue();
     }
     if (_currentPayloadQueue.IsFinished())
     {
         Message.Publish(new SequenceFinished());
     }
     else
     {
         var payloadData = _currentPayloadQueue.GetNext();
         Message.Subscribe(new MessageSubscription(payloadData.Finished, _ => ProcessNext(), this));
         Message.Publish(payloadData.Payload);
     }
 }