public Logic(LastOrDefault <TIn> stage) : base(stage.Shape) { _inlet = stage._in; Action onPush = () => { _prev = Grab(_inlet); _foundAtLeastOne = true; Pull(_inlet); }; Action onUpstreamFinish = () => { if (stage._throwOnDefault && !_foundAtLeastOne) { _promise.TrySetException(new NoSuchElementException("Last of empty stream")); } else { _promise.TrySetResult(_prev); } CompleteStage(); }; Action <Exception> onUpstreamFailure = e => { _promise.TrySetException(e); FailStage(e); }; SetHandler(stage._in, onPush, onUpstreamFinish, onUpstreamFailure); }
public Logic(LastOrDefault <TIn> stage) : base(stage.Shape) { _stage = stage; SetHandler(stage._in, this); }