<PackageReference Include="Polly" Version="4.3.0" />

RetryPolicyStateWithSleepDurationProvider<TResult>

using Polly.Utilities; using System; namespace Polly.Retry { internal class RetryPolicyStateWithSleepDurationProvider<TResult> : IRetryPolicyState<TResult> { private int _errorCount; private readonly Func<int, TimeSpan> _sleepDurationProvider; private readonly Action<DelegateResult<TResult>, TimeSpan, Context> _onRetry; private readonly Context _context; public RetryPolicyStateWithSleepDurationProvider(Func<int, TimeSpan> sleepDurationProvider, Action<DelegateResult<TResult>, TimeSpan, Context> onRetry, Context context) { _sleepDurationProvider = sleepDurationProvider; _onRetry = onRetry; _context = context; } public RetryPolicyStateWithSleepDurationProvider(Func<int, TimeSpan> sleepDurationProvider, Action<DelegateResult<TResult>, TimeSpan> onRetry) : this(sleepDurationProvider, (Action<DelegateResult<TResult>, TimeSpan, Context>)delegate(DelegateResult<TResult> delegateResult, TimeSpan timespan, Context context) { onRetry(delegateResult, timespan); }, Context.Empty) { } public bool CanRetry(DelegateResult<TResult> delegateResult) { if (_errorCount < 2147483647) _errorCount++; TimeSpan timeSpan = _sleepDurationProvider(_errorCount); _onRetry(delegateResult, timeSpan, _context); SystemClock.Sleep(timeSpan); return true; } } }