/// <inheritdoc /> protected override async Task ExecuteAsync(CancellationToken stoppingToken) { try { LoadDatabaseFromSnapshot(); _logger.LogInformation($"Initialized {GetType().Name}, listening for event entries to be processed"); while (!_stopped) { // Only integrate new events as long as no one is currently assuming a fixed current version _versionControl.IncreaseVersion(() => { IntegrateNewEvents().Wait(stoppingToken); return(_currentVersion); }); await Task.Delay(_listeningInterval, stoppingToken); _logger.LogDebug($"{GetType().Name} is still listening for event entries..."); } } catch (AggregateException e) { foreach (var innerException in e.InnerExceptions) { _logger.LogError($"{innerException.Message}\n{innerException.StackTrace}"); } Program.Shutdown(); throw; } catch (Exception e) { _logger.LogError($"{e.Message}\n{e.StackTrace}"); Program.Shutdown(); throw; } }