Ejemplo n.º 1
0
        public async Task Execute(TEntry entry, CancellationToken cancellationToken)
        {
            var batchEntry = new BatchEntry <TEntry>(entry);

            await _channel.Writer.WriteAsync(batchEntry, cancellationToken).ConfigureAwait(false);

            await batchEntry.Completed.ConfigureAwait(false);
        }
Ejemplo n.º 2
0
        async Task ReadBatch()
        {
            var batchToken = new CancellationTokenSource(_settings.Timeout);
            var batch      = new List <BatchEntry <TEntry> >();

            try
            {
                try
                {
                    for (int entryId = 0,
                         batchLength = 0;
                         entryId < _settings.MessageLimit && batchLength < _settings.SizeLimit;
                         entryId++)
                    {
                        BatchEntry <TEntry> entry = await _channel.Reader.ReadAsync(batchToken.Token).ConfigureAwait(false);

                        batchLength += AddingEntry(entry.Entry, entryId.ToString());
                        batch.Add(entry);

                        if (await _channel.Reader.WaitToReadAsync(batchToken.Token).ConfigureAwait(false) == false)
                        {
                            break;
                        }
                    }
                }
                catch (OperationCanceledException exception) when(exception.CancellationToken == batchToken.Token && batch.Count > 0)
                {
                }

                await _executor.Push(() => ExecuteBatch(batch)).ConfigureAwait(false);
            }
            catch (OperationCanceledException exception) when(exception.CancellationToken == batchToken.Token)
            {
            }
            catch (Exception exception)
            {
                foreach (BatchEntry <TEntry> entry in batch)
                {
                    entry.SetFaulted(exception);
                }
            }
            finally
            {
                batchToken.Dispose();
            }
        }