Ejemplo n.º 1
0
            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);
            }
Ejemplo n.º 2
0
            public Logic(LastOrDefault <TIn> stage) : base(stage.Shape)
            {
                _stage = stage;

                SetHandler(stage._in, this);
            }