Esempio n. 1
0
        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)));
        }