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.
40 lines
1.4 KiB
C#
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);
|
|
}
|
|
}
|
|
} |