using EnvelopeGenerator.ServiceHost.Jobs; using Microsoft.Extensions.Options; namespace EnvelopeGenerator.ServiceHost; public class Worker : BackgroundService { private readonly ILogger _logger; private readonly int _delayMilliseconds; private readonly IServiceScopeFactory _scopeFactory; public Worker(ILogger logger, IOptions options, IServiceScopeFactory scopeFactory) { _logger = logger; _delayMilliseconds = options.Value.DelayMilliseconds; _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); } } }