From 1912feb9cfe51deaedbe3abe9239fd1bcf2b37f8 Mon Sep 17 00:00:00 2001 From: Paweł Bernaciak Date: Wed, 25 Oct 2023 20:28:48 +0200 Subject: Make voting work --- .../Elements.Backend/Services/PeriodicService.cs | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 backend/Elements.Backend/Services/PeriodicService.cs (limited to 'backend/Elements.Backend/Services/PeriodicService.cs') 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 _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}."); + } + } + } +} \ No newline at end of file -- cgit v1.2.3