public async Task Process(IEnumerable <EventData> events) { if (events is null) { throw new ArgumentNullException(nameof(events)); } List <Exception>?exceptions = default; foreach (EventData eventData in events) { try { if (_converter.TryConvertToMessage(eventData) is Message message) { if (_handler.CanHandle(message)) { await _handler.Handle(message).ConfigureAwait(continueOnCapturedContext: false); } } } catch (Exception exception) { switch (exceptions) { case null: exceptions = new List <Exception> { exception }; break; default: exceptions.Add(exception); break; } } } if (exceptions != null) { throw new AggregateException(innerExceptions: exceptions); } }