diff --git a/src/modules/retention/Elsa.Retention/HostedServices/CleanupService.cs b/src/modules/retention/Elsa.Retention/HostedServices/CleanupService.cs index 748a5f752..e8164d139 100644 --- a/src/modules/retention/Elsa.Retention/HostedServices/CleanupService.cs +++ b/src/modules/retention/Elsa.Retention/HostedServices/CleanupService.cs @@ -3,6 +3,7 @@ using System.Threading; using System.Threading.Tasks; using Elsa.Retention.Jobs; using Elsa.Retention.Options; +using Elsa.Services; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; @@ -16,12 +17,14 @@ namespace Elsa.Retention.HostedServices public class CleanupService : BackgroundService { private readonly IServiceScopeFactory _serviceScopeFactory; + private readonly IDistributedLockProvider _distributedLockProvider; private readonly ILogger _logger; private readonly TimeSpan _interval; - public CleanupService(IOptions options, IServiceScopeFactory serviceScopeFactory, ILogger logger) + public CleanupService(IOptions options, IServiceScopeFactory serviceScopeFactory, IDistributedLockProvider distributedLockProvider, ILogger logger) { _serviceScopeFactory = serviceScopeFactory; + _distributedLockProvider = distributedLockProvider; _logger = logger; _interval = options.Value.SweepInterval.ToTimeSpan(); } @@ -34,7 +37,8 @@ namespace Elsa.Retention.HostedServices while (!stoppingToken.IsCancellationRequested) { await Task.Delay(_interval, stoppingToken); - + await using var handle = await _distributedLockProvider.AcquireLockAsync(nameof(CleanupService), cancellationToken: stoppingToken); + try { await job.ExecuteAsync(stoppingToken);