protected override async Task ExecuteAsync(CancellationToken cancellationToken) { try { // Upgrade database if that is required var migrationResult = _migrator.UpgradeDatabase(); if (migrationResult == MigrationResult.Failure) { _logger.LogCritical("Database migration failed"); _cancellationTokenSource.Cancel(); } while (!_cancellationToken.IsCancellationRequested) { await Task.Run(() => _collectorManager.ProcessGamesAsync(_cancellationToken), _cancellationToken); var isDataWritten = await _collectorManager.TryGetGamesAsync(_cancellationToken); if (!isDataWritten) { await Task.Delay(_timeDelay, _cancellationToken); } } } catch (Exception exception) { _logger.LogCritical(exception.Message); _cancellationTokenSource.Cancel(); Environment.ExitCode = 1; } finally { _cancellationTokenSource.Cancel(); } }