Example #1
0
            public Logic(QueueSink <T> stage, int maxBuffer) : base(stage.Shape)
            {
                _stage          = stage;
                _maxBuffer      = maxBuffer;
                _currentRequest = new Option <TaskCompletionSource <Option <T> > >();

                SetHandler(stage.In, this);
            }
Example #2
0
            public Logic(QueueSink <T> stage, int maxBuffer) : base(stage.Shape)
            {
                _stage          = stage;
                _maxBuffer      = maxBuffer;
                _currentRequest = new Option <TaskCompletionSource <Option <T> > >();

                SetHandler(_stage.In,
                           onPush: () =>
                {
                    EnqueueAndNotify(new Result <Option <T> >(Grab(_stage.In)));
                    if (_buffer.Used < _maxBuffer)
                    {
                        Pull(_stage.In);
                    }
                },
                           onUpstreamFinish: () => EnqueueAndNotify(new Result <Option <T> >(Option <T> .None)),
                           onUpstreamFailure: ex => EnqueueAndNotify(new Result <Option <T> >(ex)));
            }