namespace Elements.Backend.Services; class PeriodicService : BackgroundService { private readonly TimeSpan _period = TimeSpan.FromMinutes(1); private readonly ILogger _logger; private readonly IServiceScopeFactory _factory; public bool IsEnabled { get; set; } = true; public PeriodicService( ILogger logger, IServiceScopeFactory factory) { _logger = logger; _factory = factory; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { using PeriodicTimer timer = new PeriodicTimer(_period); while ( !stoppingToken.IsCancellationRequested && await timer.WaitForNextTickAsync(stoppingToken)) { try { if (!IsEnabled) continue; await using AsyncServiceScope asyncScope = _factory.CreateAsyncScope(); FinishVoteService finishVoteService = asyncScope.ServiceProvider.GetRequiredService(); await finishVoteService.DoSomethingAsync(); } catch (Exception ex) { _logger.LogInformation($"Failed to execute periodic service, Error: {ex.Message}."); } } } }