FallbackTResultSyntaxAsync
Fluent API for defining a Fallback Policy.
using Polly.Fallback;
using Polly.Utilities;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace Polly
{
public static class FallbackTResultSyntaxAsync
{
public static FallbackPolicy<TResult> FallbackAsync<TResult>(this PolicyBuilder<TResult> policyBuilder, TResult fallbackValue)
{
Func<DelegateResult<TResult>, Task> onFallbackAsync = (DelegateResult<TResult> _) => TaskHelper.EmptyTask;
return policyBuilder.FallbackAsync((CancellationToken ct) => TaskHelper.FromResult<TResult>(fallbackValue), onFallbackAsync);
}
public static FallbackPolicy<TResult> FallbackAsync<TResult>(this PolicyBuilder<TResult> policyBuilder, Func<CancellationToken, Task<TResult>> fallbackAction)
{
if (fallbackAction == null)
throw new ArgumentNullException("fallbackAction");
Func<DelegateResult<TResult>, Task> onFallbackAsync = (DelegateResult<TResult> _) => TaskHelper.EmptyTask;
return policyBuilder.FallbackAsync(fallbackAction, onFallbackAsync);
}
public static FallbackPolicy<TResult> FallbackAsync<TResult>(this PolicyBuilder<TResult> policyBuilder, TResult fallbackValue, Func<DelegateResult<TResult>, Task> onFallbackAsync)
{
if (onFallbackAsync == null)
throw new ArgumentNullException("onFallbackAsync");
return policyBuilder.FallbackAsync((DelegateResult<TResult> outcome, Context ctx, CancellationToken ct) => TaskHelper.FromResult<TResult>(fallbackValue), (DelegateResult<TResult> outcome, Context context) => onFallbackAsync(outcome));
}
public static FallbackPolicy<TResult> FallbackAsync<TResult>(this PolicyBuilder<TResult> policyBuilder, Func<CancellationToken, Task<TResult>> fallbackAction, Func<DelegateResult<TResult>, Task> onFallbackAsync)
{
if (fallbackAction == null)
throw new ArgumentNullException("fallbackAction");
if (onFallbackAsync == null)
throw new ArgumentNullException("onFallbackAsync");
return policyBuilder.FallbackAsync((DelegateResult<TResult> outcome, Context ctx, CancellationToken ct) => fallbackAction(ct), (DelegateResult<TResult> outcome, Context context) => onFallbackAsync(outcome));
}
public static FallbackPolicy<TResult> FallbackAsync<TResult>(this PolicyBuilder<TResult> policyBuilder, TResult fallbackValue, Func<DelegateResult<TResult>, Context, Task> onFallbackAsync)
{
if (onFallbackAsync == null)
throw new ArgumentNullException("onFallbackAsync");
return policyBuilder.FallbackAsync((DelegateResult<TResult> outcome, Context ctx, CancellationToken ct) => TaskHelper.FromResult<TResult>(fallbackValue), onFallbackAsync);
}
[Obsolete("This overload is deprecated and will be removed in a future release. Prefer the overload in which both fallbackAction and onFallbackAsync take a Context input parameter.")]
public static FallbackPolicy<TResult> FallbackAsync<TResult>(this PolicyBuilder<TResult> policyBuilder, Func<CancellationToken, Task<TResult>> fallbackAction, Func<DelegateResult<TResult>, Context, Task> onFallbackAsync)
{
if (fallbackAction == null)
throw new ArgumentNullException("fallbackAction");
if (onFallbackAsync == null)
throw new ArgumentNullException("onFallbackAsync");
return policyBuilder.FallbackAsync((DelegateResult<TResult> outcome, Context ctx, CancellationToken ct) => fallbackAction(ct), onFallbackAsync);
}
public static FallbackPolicy<TResult> FallbackAsync<TResult>(this PolicyBuilder<TResult> policyBuilder, Func<Context, CancellationToken, Task<TResult>> fallbackAction, Func<DelegateResult<TResult>, Context, Task> onFallbackAsync)
{
if (fallbackAction == null)
throw new ArgumentNullException("fallbackAction");
if (onFallbackAsync == null)
throw new ArgumentNullException("onFallbackAsync");
return policyBuilder.FallbackAsync((DelegateResult<TResult> outcome, Context ctx, CancellationToken ct) => fallbackAction(ctx, ct), onFallbackAsync);
}
public static FallbackPolicy<TResult> FallbackAsync<TResult>(this PolicyBuilder<TResult> policyBuilder, Func<DelegateResult<TResult>, Context, CancellationToken, Task<TResult>> fallbackAction, Func<DelegateResult<TResult>, Context, Task> onFallbackAsync)
{
if (fallbackAction == null)
throw new ArgumentNullException("fallbackAction");
if (onFallbackAsync == null)
throw new ArgumentNullException("onFallbackAsync");
return new FallbackPolicy<TResult>((Func<Func<Context, CancellationToken, Task<TResult>>, Context, CancellationToken, bool, Task<TResult>>)((Func<Context, CancellationToken, Task<TResult>> action, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext) => FallbackEngine.ImplementationAsync<TResult>(action, context, (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates, onFallbackAsync, fallbackAction, cancellationToken, continueOnCapturedContext)), (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates);
}
}
}