private async Task BuildProjections() { foreach (var projection in _projections) { var offset = await projection.Offset(); var @from = offset + 1; var events = await _eventStream .Load(@from, _configuration.BatchSize) ?? new List <IDomainEvent>(); var i = 0; var lastEvent = events.Count; foreach (var @event in events) { i++; try { await projection.HandleEvent(@event, i == lastEvent); } catch (Exception ex) { HandleException(new AggregateException(new[] { new Exception($"ProjectionAgent: Unable to apply {@event.GetType().Name} event for {projection.GetType().Name} projection: {ex.Message}"), ex })); return; } } } }
private void BuildProjections() { foreach (var projection in _projections) { var offset = projection.Offset().GetAwaiter().GetResult(); var @from = offset + 1; var events = _eventStream .Load(@from, _configuration.BatchSize, projection.Subscriptions()) .GetAwaiter() .GetResult() ?? new List <IDomainEvent>(); foreach (var @event in events) { try { if (!_isActive) { ResetProjections(); return; } projection.HandleEvent(@event).GetAwaiter().GetResult(); } catch (Exception ex) { HandleException(new AggregateException(new[] { new Exception($"ProjectionAgent: Unable to apply {@event.GetType().Name} event for {projection.GetType().Name} projection: {ex.Message}"), ex })); break; } } } }