Пример #1
0
        public async Task Start()
        {
            if (_token.IsCancellationRequested)
            {
                return;
            }

            RegisterChild(_dispatcher);
            var count = _buffer.BufferedCount;

            // _log.Debug($"{count} streams in buffer", this);
            if (count > 0)
            {
                var obs = _buffer.OutputBlock.AsObservable()
                          .Take(count).Select(async s =>
                {
                    await _dispatcher.SendAsync(s);
                    if (!_token.IsCancellationRequested)
                    {
                        return(await s.Task);
                    }
                    return(false);
                });

                await obs.LastOrDefaultAsync();
            }

            _buffer.LinkTo(_dispatcher, s => !_token.IsCancellationRequested);
            _buffer.LinkLeftToNull();
        }