summaryrefslogtreecommitdiff
path: root/backend/Elements.Backend/Services/PeriodicService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'backend/Elements.Backend/Services/PeriodicService.cs')
-rw-r--r--backend/Elements.Backend/Services/PeriodicService.cs38
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