public Batch(DateTime firstMessageReceived, DateTime lastMessageReceived, BatchCompletionMode mode, ConsumeContext <TMessage>[] messages) { FirstMessageReceived = firstMessageReceived; LastMessageReceived = lastMessageReceived; Mode = mode; _messages = messages; }
async Task Deliver(ConsumeContext context, IReadOnlyList <ConsumeContext <TMessage> > messages, BatchCompletionMode batchCompletionMode) { _timer.Dispose(); Batch <TMessage> batch = new Batch(_firstMessage, _lastMessage, batchCompletionMode, messages); ConsumeContext <Batch <TMessage> > batchConsumeContext = new BatchConsumeContext <TMessage>(context, batch); try { await _consumerPipe.Send(batchConsumeContext).ConfigureAwait(false); _completed.TrySetResult(DateTime.UtcNow); } catch (OperationCanceledException exception) when(exception.CancellationToken == context.CancellationToken) { _completed.TrySetCanceled(); } catch (Exception exception) { if (batchConsumeContext.TryGetPayload(out RetryContext <ConsumeContext <Batch <TMessage> > > retryContext)) { for (var i = 0; i < messages.Count; i++) { messages[i].GetOrAddPayload(() => retryContext); } } _completed.TrySetException(exception); } }
async Task Deliver(ConsumeContext context, IReadOnlyList <ConsumeContext <TMessage> > messages, BatchCompletionMode batchCompletionMode) { _timer.Dispose(); Batch <TMessage> batch = new Batch(_firstMessage, _lastMessage, batchCompletionMode, messages); try { var proxy = new MessageConsumeContext <Batch <TMessage> >(context, batch); await _consumerFactory.Send(proxy, _consumerPipe).ConfigureAwait(false); _completed.TrySetResult(DateTime.UtcNow); } catch (OperationCanceledException exception) when(exception.CancellationToken == context.CancellationToken) { _completed.TrySetCanceled(); } catch (Exception exception) { _completed.TrySetException(exception); } }