public BaseBackgroundWorker(ILogger logger, IServiceProvider serviceProvider, IOptions <BackgroundWorkersOptions> optionsAccessor) { Logger = logger; ServiceProvider = serviceProvider; ServiceScopeFactory = serviceProvider.GetRequiredService <IServiceScopeFactory>(); ClassName = this.GetType().Name; _options = optionsAccessor.Value?.Workers?.FirstOrDefault(x => x.ClassName == ClassName); if (_options == null) { _options = new BackgroundWorkerOptionModel(); } IsDisabled = _options.IsDisabled; }
public BaseBackgroundWorker(ILogger logger, IServiceProvider serviceProvider, IOptions <BackgroundWorkersOptions> optionsAccessor) { Logger = logger; ServiceProvider = serviceProvider; ServiceScopeFactory = serviceProvider.GetRequiredService <IServiceScopeFactory>(); ClassName = this.GetType().Name; _options = optionsAccessor.Value?.Workers?.FirstOrDefault(x => x.ClassName == ClassName); if (_options == null) { _options = new BackgroundWorkerOptionModel(); } IsDisabled = _options.IsDisabled; IterationRetryCount = _options.IterationRetryCount ?? 0; LogIterationRetries = _options.LogIterationRetries; IterationRetryDelayInMillisecondsStart = (int?)_options.IterationRetryDelayInMillisecondsStart ?? 1000; IterationRetryDelayInMillisecondsEnd = (int?)_options.IterationRetryDelayInMillisecondsEnd ?? 2000; _defaultRetryPolicyAsync = LogIterationRetries == true? Policy .Handle <Exception>() .WaitAndRetryAsync( retryCount: (int)IterationRetryCount, sleepDurationProvider: retryAttempt => TimeSpan.FromMilliseconds(new Random().Next(IterationRetryDelayInMillisecondsStart, IterationRetryDelayInMillisecondsEnd)), onRetry: (ex, ts) => { Logger.LogError(ex.Message, ex); }) : Policy .Handle <Exception>() .WaitAndRetryAsync( retryCount: (int)IterationRetryCount, sleepDurationProvider: retryAttempt => TimeSpan.FromMilliseconds(new Random().Next(IterationRetryDelayInMillisecondsStart, IterationRetryDelayInMillisecondsEnd))); }