Add job state check and improve Worker options handling

Refactored Worker to inject JobStateManager and use the full
WorkerOptions object. Now, FinalizeDocumentJob only runs if
its state is State.Running. Delay is also read from options,
improving configuration and control over job execution.
This commit is contained in:
2026-04-13 16:31:00 +02:00
parent d6c5b63c49
commit 6954a86358

View File

@@ -6,13 +6,15 @@ namespace EnvelopeGenerator.ServiceHost;
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly int _delayMilliseconds;
private readonly WorkerOptions _options;
private readonly JobStateManager _jobStateManager;
private readonly IServiceScopeFactory _scopeFactory;
public Worker(ILogger<Worker> logger, IOptions<WorkerOptions> options, IServiceScopeFactory scopeFactory)
public Worker(ILogger<Worker> logger, IOptions<WorkerOptions> options, JobStateManager jobStateManager, IServiceScopeFactory scopeFactory)
{
_logger = logger;
_delayMilliseconds = options.Value.DelayMilliseconds;
_options = options.Value;
_jobStateManager = jobStateManager;
_scopeFactory = scopeFactory;
}
@@ -25,11 +27,14 @@ public class Worker : BackgroundService
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
}
using var scope = _scopeFactory.CreateScope();
var finalizeDocumentJob = scope.ServiceProvider.GetRequiredService<FinalizeDocumentJob>();
await finalizeDocumentJob.ExecuteAsync(stoppingToken);
if (_jobStateManager.GetState<FinalizeDocumentJob>() == State.Running)
{
using var scope = _scopeFactory.CreateScope();
var finalizeDocumentJob = scope.ServiceProvider.GetRequiredService<FinalizeDocumentJob>();
await finalizeDocumentJob.ExecuteAsync(stoppingToken);
}
await Task.Delay(_delayMilliseconds, stoppingToken);
await Task.Delay(_options.DelayMilliseconds, stoppingToken);
}
}
}
}