Exemple #1
0
        public async Task TearDown()
        {
            if (_localCts == null)
            {
                return;
            }
            try
            {
                using (_localCts)
                {
                    using (_mergedCts)
                    {
#if !NETFRAMEWORK && !NETSTANDARD2_0
                        await using (_feed.ConfigureAwait(false))
#else
                        using (_feed)
#endif
                        {
                            _localCts.Cancel();
                            _feed.Close();
                            await _consumerTask.ConfigureAwait(false);
                        }
                    }
                }
            }
            finally
            {
                _localCts = null;
            }
        }
Exemple #2
0
        public static Task Execute(CancellationToken token, int bufferSize, IDataAdapter <TP, TC> adapter,
                                   IReadOnlyList <IProducer <TP> > producers, IReadOnlyList <IConsumer <TC> > consumers)
        {
            return(Task.Run(async() =>
            {
                using var localCts = new CancellationTokenSource();
                using var combinedCts = CancellationTokenSource.CreateLinkedTokenSource(token, localCts.Token);
#if !NETFRAMEWORK && !NETSTANDARD2_0
                var ppcBuffer = new PpcBuffer <TP>(bufferSize, combinedCts.Token);
                await using (ppcBuffer.ConfigureAwait(false))
#else
                using (var ppcBuffer = new PpcBuffer <TP>(bufferSize, combinedCts.Token))
#endif
                {
                    token.ThrowIfCancellationRequested();
                    try
                    {
                        var rc = RunConsumers(consumers, ppcBuffer, adapter, combinedCts.Token, localCts);
                        var rp = RunProducers(producers, ppcBuffer, combinedCts.Token, localCts);
                        await Task.WhenAll(rc, rp).ConfigureAwait(false);
                    }
                    catch (Exception e)
                    {
                        if (token.IsCancellationRequested)
                        {
                            throw new OperationCanceledException("PpcCancelled", e, token);
                        }
                        throw;
                    }
                }
            }, CancellationToken.None));
        }