diff options
Diffstat (limited to 'backend/Elements.Backend/Services/PeriodicService.cs')
| -rw-r--r-- | backend/Elements.Backend/Services/PeriodicService.cs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/backend/Elements.Backend/Services/PeriodicService.cs b/backend/Elements.Backend/Services/PeriodicService.cs new file mode 100644 index 0000000..48cdf2f --- /dev/null +++ b/backend/Elements.Backend/Services/PeriodicService.cs @@ -0,0 +1,38 @@ +namespace Elements.Backend.Services; + +class PeriodicService : BackgroundService +{ + private readonly TimeSpan _period = TimeSpan.FromMinutes(1); + private readonly ILogger<PeriodicService> _logger; + private readonly IServiceScopeFactory _factory; + public bool IsEnabled { get; set; } = true; + + public PeriodicService( + ILogger<PeriodicService> 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<FinishVoteService>(); + await finishVoteService.DoSomethingAsync(); + } + catch (Exception ex) + { + _logger.LogInformation($"Failed to execute periodic service, Error: {ex.Message}."); + } + } + } +}
\ No newline at end of file |
