Files
EnvelopeGenerator/EnvelopeGenerator.ServiceHost/Worker.cs
TekH 6954a86358 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.
2026-04-13 16:31:00 +02:00

40 lines
1.4 KiB
C#

using EnvelopeGenerator.ServiceHost.Jobs;
using Microsoft.Extensions.Options;
namespace EnvelopeGenerator.ServiceHost;
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly WorkerOptions _options;
private readonly JobStateManager _jobStateManager;
private readonly IServiceScopeFactory _scopeFactory;
public Worker(ILogger<Worker> logger, IOptions<WorkerOptions> options, JobStateManager jobStateManager, IServiceScopeFactory scopeFactory)
{
_logger = logger;
_options = options.Value;
_jobStateManager = jobStateManager;
_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);
}
if (_jobStateManager.GetState<FinalizeDocumentJob>() == State.Running)
{
using var scope = _scopeFactory.CreateScope();
var finalizeDocumentJob = scope.ServiceProvider.GetRequiredService<FinalizeDocumentJob>();
await finalizeDocumentJob.ExecuteAsync(stoppingToken);
}
await Task.Delay(_options.DelayMilliseconds, stoppingToken);
}
}
}