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); }
protected override void InvalidateSubstreamOutput(SubstreamKey substream) { if (!ReferenceEquals(_pendingSubstreamOutput, null) && substream == _pendingSubstreamOutput.Key) { _pendingSubstreamOutput = null; NextPhase(_waitNext); } base.InvalidateSubstreamOutput(substream); }
private TransferPhase DispatchToSubstream(object element, SubstreamOutput substream) { _pendingSubstreamOutput = substream; return(new TransferPhase(substream.NeedsDemand, () => { substream.EnqueueOutputElement(element); _pendingSubstreamOutput = null; NextPhase(_waitNext); })); }