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

RetryTResultSyntax

public static class RetryTResultSyntax
Fluent API for defining a Retry Policy.
using Polly.Retry; using System; using System.Collections.Generic; using System.Linq; using System.Threading; namespace Polly { public static class RetryTResultSyntax { public static RetryPolicy<TResult> Retry<TResult>(this PolicyBuilder<TResult> policyBuilder) { return policyBuilder.Retry(1); } public static RetryPolicy<TResult> Retry<TResult>(this PolicyBuilder<TResult> policyBuilder, int retryCount) { Action<DelegateResult<TResult>, int> onRetry = delegate { }; return policyBuilder.Retry(retryCount, onRetry); } public static RetryPolicy<TResult> Retry<TResult>(this PolicyBuilder<TResult> policyBuilder, Action<DelegateResult<TResult>, int> onRetry) { return policyBuilder.Retry(1, onRetry); } public static RetryPolicy<TResult> Retry<TResult>(this PolicyBuilder<TResult> policyBuilder, int retryCount, Action<DelegateResult<TResult>, int> onRetry) { if (retryCount < 0) throw new ArgumentOutOfRangeException("retryCount", "Value must be greater than or equal to zero."); if (onRetry == null) throw new ArgumentNullException("onRetry"); return policyBuilder.Retry(retryCount, delegate(DelegateResult<TResult> outcome, int i, Context ctx) { onRetry(outcome, i); }); } public static RetryPolicy<TResult> Retry<TResult>(this PolicyBuilder<TResult> policyBuilder, Action<DelegateResult<TResult>, int, Context> onRetry) { return policyBuilder.Retry(1, onRetry); } public static RetryPolicy<TResult> Retry<TResult>(this PolicyBuilder<TResult> policyBuilder, int retryCount, Action<DelegateResult<TResult>, int, Context> onRetry) { if (retryCount < 0) throw new ArgumentOutOfRangeException("retryCount", "Value must be greater than or equal to zero."); if (onRetry == null) throw new ArgumentNullException("onRetry"); return new RetryPolicy<TResult>((Func<Func<Context, CancellationToken, TResult>, Context, CancellationToken, TResult>)((Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken) => RetryEngine.Implementation<TResult>(action, context, cancellationToken, (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates, (Func<IRetryPolicyState<TResult>>)(() => new RetryStateRetryWithCount<TResult>(retryCount, onRetry, context)))), (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates); } public static RetryPolicy<TResult> RetryForever<TResult>(this PolicyBuilder<TResult> policyBuilder) { Action<DelegateResult<TResult>> onRetry = delegate { }; return policyBuilder.RetryForever(onRetry); } public static RetryPolicy<TResult> RetryForever<TResult>(this PolicyBuilder<TResult> policyBuilder, Action<DelegateResult<TResult>> onRetry) { if (onRetry == null) throw new ArgumentNullException("onRetry"); return policyBuilder.RetryForever(delegate(DelegateResult<TResult> outcome, Context ctx) { onRetry(outcome); }); } public static RetryPolicy<TResult> RetryForever<TResult>(this PolicyBuilder<TResult> policyBuilder, Action<DelegateResult<TResult>, Context> onRetry) { if (onRetry == null) throw new ArgumentNullException("onRetry"); return new RetryPolicy<TResult>((Func<Func<Context, CancellationToken, TResult>, Context, CancellationToken, TResult>)((Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken) => RetryEngine.Implementation<TResult>(action, context, cancellationToken, (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates, (Func<IRetryPolicyState<TResult>>)(() => new RetryStateRetryForever<TResult>(onRetry, context)))), (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates); } public static RetryPolicy<TResult> WaitAndRetry<TResult>(this PolicyBuilder<TResult> policyBuilder, int retryCount, Func<int, TimeSpan> sleepDurationProvider) { Action<DelegateResult<TResult>, TimeSpan, int, Context> onRetry = delegate { }; return policyBuilder.WaitAndRetry(retryCount, sleepDurationProvider, onRetry); } public static RetryPolicy<TResult> WaitAndRetry<TResult>(this PolicyBuilder<TResult> policyBuilder, int retryCount, Func<int, TimeSpan> sleepDurationProvider, Action<DelegateResult<TResult>, TimeSpan> onRetry) { if (onRetry == null) throw new ArgumentNullException("onRetry"); return policyBuilder.WaitAndRetry(retryCount, sleepDurationProvider, delegate(DelegateResult<TResult> outcome, TimeSpan span, int i, Context ctx) { onRetry(outcome, span); }); } public static RetryPolicy<TResult> WaitAndRetry<TResult>(this PolicyBuilder<TResult> policyBuilder, int retryCount, Func<int, TimeSpan> sleepDurationProvider, Action<DelegateResult<TResult>, TimeSpan, Context> onRetry) { if (onRetry == null) throw new ArgumentNullException("onRetry"); return policyBuilder.WaitAndRetry(retryCount, sleepDurationProvider, delegate(DelegateResult<TResult> outcome, TimeSpan span, int i, Context ctx) { onRetry(outcome, span, ctx); }); } public static RetryPolicy<TResult> WaitAndRetry<TResult>(this PolicyBuilder<TResult> policyBuilder, int retryCount, Func<int, TimeSpan> sleepDurationProvider, Action<DelegateResult<TResult>, TimeSpan, int, Context> onRetry) { if (retryCount < 0) throw new ArgumentOutOfRangeException("retryCount", "Value must be greater than or equal to zero."); if (sleepDurationProvider == null) throw new ArgumentNullException("sleepDurationProvider"); if (onRetry == null) throw new ArgumentNullException("onRetry"); IEnumerable<TimeSpan> sleepDurations = Enumerable.Range(1, retryCount).Select(sleepDurationProvider); return new RetryPolicy<TResult>((Func<Func<Context, CancellationToken, TResult>, Context, CancellationToken, TResult>)((Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken) => RetryEngine.Implementation<TResult>(action, context, cancellationToken, (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates, (Func<IRetryPolicyState<TResult>>)(() => new RetryStateWaitAndRetry<TResult>(sleepDurations, onRetry, context)))), (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates); } public static RetryPolicy<TResult> WaitAndRetry<TResult>(this PolicyBuilder<TResult> policyBuilder, int retryCount, Func<int, Context, TimeSpan> sleepDurationProvider) { Action<DelegateResult<TResult>, TimeSpan, int, Context> onRetry = delegate { }; return policyBuilder.WaitAndRetry(retryCount, sleepDurationProvider, onRetry); } public static RetryPolicy<TResult> WaitAndRetry<TResult>(this PolicyBuilder<TResult> policyBuilder, int retryCount, Func<int, Context, TimeSpan> sleepDurationProvider, Action<DelegateResult<TResult>, TimeSpan, Context> onRetry) { if (onRetry == null) throw new ArgumentNullException("onRetry"); return policyBuilder.WaitAndRetry(retryCount, sleepDurationProvider, delegate(DelegateResult<TResult> outcome, TimeSpan span, int i, Context ctx) { onRetry(outcome, span, ctx); }); } public static RetryPolicy<TResult> WaitAndRetry<TResult>(this PolicyBuilder<TResult> policyBuilder, int retryCount, Func<int, Context, TimeSpan> sleepDurationProvider, Action<DelegateResult<TResult>, TimeSpan, int, Context> onRetry) { return policyBuilder.WaitAndRetry(retryCount, (int i, DelegateResult<TResult> outcome, Context ctx) => sleepDurationProvider(i, ctx), onRetry); } public static RetryPolicy<TResult> WaitAndRetry<TResult>(this PolicyBuilder<TResult> policyBuilder, int retryCount, Func<int, DelegateResult<TResult>, Context, TimeSpan> sleepDurationProvider) { Action<DelegateResult<TResult>, TimeSpan, int, Context> onRetry = delegate { }; return policyBuilder.WaitAndRetry(retryCount, sleepDurationProvider, onRetry); } public static RetryPolicy<TResult> WaitAndRetry<TResult>(this PolicyBuilder<TResult> policyBuilder, int retryCount, Func<int, DelegateResult<TResult>, Context, TimeSpan> sleepDurationProvider, Action<DelegateResult<TResult>, TimeSpan, Context> onRetry) { if (onRetry == null) throw new ArgumentNullException("onRetry"); return policyBuilder.WaitAndRetry(retryCount, sleepDurationProvider, delegate(DelegateResult<TResult> outcome, TimeSpan span, int i, Context ctx) { onRetry(outcome, span, ctx); }); } public static RetryPolicy<TResult> WaitAndRetry<TResult>(this PolicyBuilder<TResult> policyBuilder, int retryCount, Func<int, DelegateResult<TResult>, Context, TimeSpan> sleepDurationProvider, Action<DelegateResult<TResult>, TimeSpan, int, Context> onRetry) { if (retryCount < 0) throw new ArgumentOutOfRangeException("retryCount", "Value must be greater than or equal to zero."); if (sleepDurationProvider == null) throw new ArgumentNullException("sleepDurationProvider"); if (onRetry == null) throw new ArgumentNullException("onRetry"); return new RetryPolicy<TResult>((Func<Func<Context, CancellationToken, TResult>, Context, CancellationToken, TResult>)((Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken) => RetryEngine.Implementation<TResult>(action, context, cancellationToken, (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates, (Func<IRetryPolicyState<TResult>>)(() => new RetryStateWaitAndRetryWithProvider<TResult>(retryCount, sleepDurationProvider, onRetry, context)))), (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates); } public static RetryPolicy<TResult> WaitAndRetry<TResult>(this PolicyBuilder<TResult> policyBuilder, IEnumerable<TimeSpan> sleepDurations) { Action<DelegateResult<TResult>, TimeSpan> onRetry = delegate { }; return policyBuilder.WaitAndRetry(sleepDurations, onRetry); } public static RetryPolicy<TResult> WaitAndRetry<TResult>(this PolicyBuilder<TResult> policyBuilder, IEnumerable<TimeSpan> sleepDurations, Action<DelegateResult<TResult>, TimeSpan> onRetry) { if (onRetry == null) throw new ArgumentNullException("onRetry"); return policyBuilder.WaitAndRetry(sleepDurations, delegate(DelegateResult<TResult> outcome, TimeSpan span, int i, Context ctx) { onRetry(outcome, span); }); } public static RetryPolicy<TResult> WaitAndRetry<TResult>(this PolicyBuilder<TResult> policyBuilder, IEnumerable<TimeSpan> sleepDurations, Action<DelegateResult<TResult>, TimeSpan, Context> onRetry) { if (onRetry == null) throw new ArgumentNullException("onRetry"); return policyBuilder.WaitAndRetry(sleepDurations, delegate(DelegateResult<TResult> outcome, TimeSpan span, int i, Context ctx) { onRetry(outcome, span, ctx); }); } public static RetryPolicy<TResult> WaitAndRetry<TResult>(this PolicyBuilder<TResult> policyBuilder, IEnumerable<TimeSpan> sleepDurations, Action<DelegateResult<TResult>, TimeSpan, int, Context> onRetry) { if (sleepDurations == null) throw new ArgumentNullException("sleepDurations"); if (onRetry == null) throw new ArgumentNullException("onRetry"); return new RetryPolicy<TResult>((Func<Func<Context, CancellationToken, TResult>, Context, CancellationToken, TResult>)((Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken) => RetryEngine.Implementation<TResult>(action, context, cancellationToken, (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates, (Func<IRetryPolicyState<TResult>>)(() => new RetryStateWaitAndRetry<TResult>(sleepDurations, onRetry, context)))), (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates); } public static RetryPolicy<TResult> WaitAndRetryForever<TResult>(this PolicyBuilder<TResult> policyBuilder, Func<int, TimeSpan> sleepDurationProvider) { if (sleepDurationProvider == null) throw new ArgumentNullException("sleepDurationProvider"); Action<DelegateResult<TResult>, TimeSpan> onRetry = delegate { }; return policyBuilder.WaitAndRetryForever(sleepDurationProvider, onRetry); } public static RetryPolicy<TResult> WaitAndRetryForever<TResult>(this PolicyBuilder<TResult> policyBuilder, Func<int, Context, TimeSpan> sleepDurationProvider) { if (sleepDurationProvider == null) throw new ArgumentNullException("sleepDurationProvider"); Action<DelegateResult<TResult>, TimeSpan, Context> onRetry = delegate { }; return policyBuilder.WaitAndRetryForever(sleepDurationProvider, onRetry); } public static RetryPolicy<TResult> WaitAndRetryForever<TResult>(this PolicyBuilder<TResult> policyBuilder, Func<int, TimeSpan> sleepDurationProvider, Action<DelegateResult<TResult>, TimeSpan> onRetry) { if (sleepDurationProvider == null) throw new ArgumentNullException("sleepDurationProvider"); if (onRetry == null) throw new ArgumentNullException("onRetry"); return policyBuilder.WaitAndRetryForever((int retryCount, Context context) => sleepDurationProvider(retryCount), delegate(DelegateResult<TResult> exception, TimeSpan timespan, Context context) { onRetry(exception, timespan); }); } public static RetryPolicy<TResult> WaitAndRetryForever<TResult>(this PolicyBuilder<TResult> policyBuilder, Func<int, Context, TimeSpan> sleepDurationProvider, Action<DelegateResult<TResult>, TimeSpan, Context> onRetry) { if (sleepDurationProvider == null) throw new ArgumentNullException("sleepDurationProvider"); return policyBuilder.WaitAndRetryForever((int i, DelegateResult<TResult> outcome, Context ctx) => sleepDurationProvider(i, ctx), onRetry); } public static RetryPolicy<TResult> WaitAndRetryForever<TResult>(this PolicyBuilder<TResult> policyBuilder, Func<int, DelegateResult<TResult>, Context, TimeSpan> sleepDurationProvider, Action<DelegateResult<TResult>, TimeSpan, Context> onRetry) { if (sleepDurationProvider == null) throw new ArgumentNullException("sleepDurationProvider"); if (onRetry == null) throw new ArgumentNullException("onRetry"); return new RetryPolicy<TResult>((Func<Func<Context, CancellationToken, TResult>, Context, CancellationToken, TResult>)((Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken) => RetryEngine.Implementation<TResult>(action, context, cancellationToken, (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates, (Func<IRetryPolicyState<TResult>>)(() => new RetryStateWaitAndRetryForever<TResult>(sleepDurationProvider, onRetry, context)))), (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates); } } }