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

FallbackSyntaxAsync

public static class FallbackSyntaxAsync
Fluent API for defining a Fallback Policy.
using Polly.Fallback; using Polly.Utilities; using System; using System.Threading; using System.Threading.Tasks; namespace Polly { public static class FallbackSyntaxAsync { public static FallbackPolicy FallbackAsync(this PolicyBuilder policyBuilder, Func<CancellationToken, Task> fallbackAction) { if (fallbackAction == null) throw new ArgumentNullException("fallbackAction"); Func<Exception, Task> onFallbackAsync = (Exception _) => TaskHelper.EmptyTask; return policyBuilder.FallbackAsync(fallbackAction, onFallbackAsync); } public static FallbackPolicy FallbackAsync(this PolicyBuilder policyBuilder, Func<CancellationToken, Task> fallbackAction, Func<Exception, Task> onFallbackAsync) { if (fallbackAction == null) throw new ArgumentNullException("fallbackAction"); if (onFallbackAsync == null) throw new ArgumentNullException("onFallbackAsync"); return policyBuilder.FallbackAsync(fallbackAction, (Exception outcome, Context context) => onFallbackAsync(outcome)); } public static FallbackPolicy FallbackAsync(this PolicyBuilder policyBuilder, Func<CancellationToken, Task> fallbackAction, Func<Exception, Context, Task> onFallbackAsync) { if (fallbackAction == null) throw new ArgumentNullException("fallbackAction"); if (onFallbackAsync == null) throw new ArgumentNullException("onFallbackAsync"); return new FallbackPolicy((Func<Context, CancellationToken, Task> action, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext) => FallbackEngine.ImplementationAsync(async delegate(Context ctx, CancellationToken ct) { await action(ctx, ct).ConfigureAwait(continueOnCapturedContext); return EmptyStruct.Instance; }, context, policyBuilder.ExceptionPredicates, PredicateHelper<EmptyStruct>.EmptyResultPredicates, (DelegateResult<EmptyStruct> outcome, Context ctx) => onFallbackAsync(outcome.Exception, ctx), async delegate(CancellationToken ct) { await fallbackAction(ct).ConfigureAwait(continueOnCapturedContext); return EmptyStruct.Instance; }, cancellationToken, continueOnCapturedContext), policyBuilder.ExceptionPredicates); } } }