using Hcs.WebApp.Services; namespace Hcs.WebApp.BackgroundServices { public class OperationExecutionService(OperationExecutionState state, IServiceScopeFactory scopeFactory) : BackgroundService { private const int SLEEP_TIME = 30000; private readonly OperationExecutionState state = state; private readonly IServiceScopeFactory scopeFactory = scopeFactory; protected override async Task ExecuteAsync(CancellationToken stoppingToken) { await InitializeState(); var scope = scopeFactory.CreateScope(); var operationService = scope.ServiceProvider.GetRequiredService(); while (!stoppingToken.IsCancellationRequested) { while (state.TryDequeueOperation(out var operation)) { await operationService.SetOperationMessageGuid(operation.Id, Guid.NewGuid().ToString()); } await Task.Delay(SLEEP_TIME, stoppingToken); } } private async Task InitializeState() { using var scope = scopeFactory.CreateScope(); var operationService = scope.ServiceProvider.GetRequiredService(); var operations = await operationService.GetInitiatedOperations(); foreach (var operation in operations) { state.EnqueueOperation(operation); } } } }