using EnvelopeGenerator.ServiceHost.Jobs; namespace EnvelopeGenerator.ServiceHost; public class Worker : BackgroundService { private readonly ILogger _logger; private readonly int _delayMilliseconds; private readonly IServiceScopeFactory _scopeFactory; public Worker(ILogger logger, IConfiguration configuration, IServiceScopeFactory scopeFactory) { _logger = logger; _delayMilliseconds = Math.Max(1, configuration.GetValue("Worker:DelayMilliseconds", 1000)); _scopeFactory = scopeFactory; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { if (_logger.IsEnabled(LogLevel.Information)) { _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); } using var scope = _scopeFactory.CreateScope(); var finalizeDocumentJob = scope.ServiceProvider.GetRequiredService(); await finalizeDocumentJob.ExecuteAsync(stoppingToken); await Task.Delay(_delayMilliseconds, stoppingToken); } } }