AsyncRetryPolicy<TResult>
public class AsyncRetryPolicy<TResult> : AsyncPolicy<TResult>, IRetryPolicy<TResult>, IRetryPolicy, IsPolicy
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
namespace Polly.Retry
{
public class AsyncRetryPolicy<TResult> : AsyncPolicy<TResult>, IRetryPolicy<TResult>, IRetryPolicy, IsPolicy
{
private readonly Func<DelegateResult<TResult>, TimeSpan, int, Context, Task> _onRetryAsync;
private readonly int _permittedRetryCount;
private readonly IEnumerable<TimeSpan> _sleepDurationsEnumerable;
private readonly Func<int, DelegateResult<TResult>, Context, TimeSpan> _sleepDurationProvider;
internal AsyncRetryPolicy(PolicyBuilder<TResult> policyBuilder, Func<DelegateResult<TResult>, TimeSpan, int, Context, Task> onRetryAsync, int permittedRetryCount = int.MaxValue, IEnumerable<TimeSpan> sleepDurationsEnumerable = null, Func<int, DelegateResult<TResult>, Context, TimeSpan> sleepDurationProvider = null)
: base(policyBuilder)
{
_permittedRetryCount = permittedRetryCount;
_sleepDurationsEnumerable = sleepDurationsEnumerable;
_sleepDurationProvider = sleepDurationProvider;
if (onRetryAsync == null)
throw new ArgumentNullException("onRetryAsync");
_onRetryAsync = onRetryAsync;
}
[DebuggerStepThrough]
protected override Task<TResult> ImplementationAsync(Func<Context, CancellationToken, Task<TResult>> action, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext)
{
return AsyncRetryEngine.ImplementationAsync<TResult>(action, context, cancellationToken, base.ExceptionPredicates, base.ResultPredicates, _onRetryAsync, _permittedRetryCount, _sleepDurationsEnumerable, _sleepDurationProvider, continueOnCapturedContext);
}
}
}