예제 #1
0
        protected SubstreamOutput CreateSubstreamOutput()
        {
            var id          = new SubstreamKey(NextId());
            var cancellable = ScheduleSubscriptionTimeout(Self, new SubstreamSubscriptionTimeout(id));
            var output      = new SubstreamOutput(id, Self, this, cancellable);

            _substreamOutputs.Add(output.Key, output);
            return(output);
        }
예제 #2
0
        protected override void InvalidateSubstreamOutput(SubstreamKey substream)
        {
            if (!ReferenceEquals(_pendingSubstreamOutput, null) && substream == _pendingSubstreamOutput.Key)
            {
                _pendingSubstreamOutput = null;
                NextPhase(_waitNext);
            }

            base.InvalidateSubstreamOutput(substream);
        }
예제 #3
0
 private TransferPhase DispatchToSubstream(object element, SubstreamOutput substream)
 {
     _pendingSubstreamOutput = substream;
     return(new TransferPhase(substream.NeedsDemand, () =>
     {
         substream.EnqueueOutputElement(element);
         _pendingSubstreamOutput = null;
         NextPhase(_waitNext);
     }));
 }