FallbackTResultSyntax
Fluent API for defining a Fallback policy governing executions returning TResult.
            
                using Polly.Fallback;
using System;
using System.Runtime.CompilerServices;
using System.Threading;
namespace Polly
{
    [System.Runtime.CompilerServices.NullableContext(1)]
    [System.Runtime.CompilerServices.Nullable(0)]
    public static class FallbackTResultSyntax
    {
        public static FallbackPolicy<TResult> Fallback<[System.Runtime.CompilerServices.Nullable(2)] TResult>(this PolicyBuilder<TResult> policyBuilder, TResult fallbackValue)
        {
            Action<DelegateResult<TResult>> onFallback = delegate {
            };
            return policyBuilder.Fallback(() => fallbackValue, onFallback);
        }
        public static FallbackPolicy<TResult> Fallback<[System.Runtime.CompilerServices.Nullable(2)] TResult>(this PolicyBuilder<TResult> policyBuilder, Func<TResult> fallbackAction)
        {
            if (fallbackAction == null)
                throw new ArgumentNullException("fallbackAction");
            Action<DelegateResult<TResult>> onFallback = delegate {
            };
            return policyBuilder.Fallback(fallbackAction, onFallback);
        }
        public static FallbackPolicy<TResult> Fallback<[System.Runtime.CompilerServices.Nullable(2)] TResult>(this PolicyBuilder<TResult> policyBuilder, Func<CancellationToken, TResult> fallbackAction)
        {
            if (fallbackAction == null)
                throw new ArgumentNullException("fallbackAction");
            Action<DelegateResult<TResult>> onFallback = delegate {
            };
            return policyBuilder.Fallback(fallbackAction, onFallback);
        }
        public static FallbackPolicy<TResult> Fallback<[System.Runtime.CompilerServices.Nullable(2)] TResult>(this PolicyBuilder<TResult> policyBuilder, TResult fallbackValue, Action<DelegateResult<TResult>> onFallback)
        {
            if (onFallback == null)
                throw new ArgumentNullException("onFallback");
            return policyBuilder.Fallback((DelegateResult<TResult> _, Context _, CancellationToken _) => fallbackValue, delegate(DelegateResult<TResult> outcome, Context _) {
                onFallback(outcome);
            });
        }
        public static FallbackPolicy<TResult> Fallback<[System.Runtime.CompilerServices.Nullable(2)] TResult>(this PolicyBuilder<TResult> policyBuilder, Func<TResult> fallbackAction, Action<DelegateResult<TResult>> onFallback)
        {
            if (fallbackAction == null)
                throw new ArgumentNullException("fallbackAction");
            if (onFallback == null)
                throw new ArgumentNullException("onFallback");
            return policyBuilder.Fallback((DelegateResult<TResult> _, Context _, CancellationToken _) => fallbackAction(), delegate(DelegateResult<TResult> outcome, Context _) {
                onFallback(outcome);
            });
        }
        public static FallbackPolicy<TResult> Fallback<[System.Runtime.CompilerServices.Nullable(2)] TResult>(this PolicyBuilder<TResult> policyBuilder, Func<CancellationToken, TResult> fallbackAction, Action<DelegateResult<TResult>> onFallback)
        {
            if (fallbackAction == null)
                throw new ArgumentNullException("fallbackAction");
            if (onFallback == null)
                throw new ArgumentNullException("onFallback");
            return policyBuilder.Fallback((DelegateResult<TResult> _, Context _, CancellationToken ct) => fallbackAction(ct), delegate(DelegateResult<TResult> outcome, Context _) {
                onFallback(outcome);
            });
        }
        public static FallbackPolicy<TResult> Fallback<[System.Runtime.CompilerServices.Nullable(2)] TResult>(this PolicyBuilder<TResult> policyBuilder, TResult fallbackValue, Action<DelegateResult<TResult>, Context> onFallback)
        {
            if (onFallback == null)
                throw new ArgumentNullException("onFallback");
            return policyBuilder.Fallback((DelegateResult<TResult> _, Context _, CancellationToken _) => fallbackValue, onFallback);
        }
        public static FallbackPolicy<TResult> Fallback<[System.Runtime.CompilerServices.Nullable(2)] TResult>(this PolicyBuilder<TResult> policyBuilder, Func<Context, TResult> fallbackAction, Action<DelegateResult<TResult>, Context> onFallback)
        {
            if (fallbackAction == null)
                throw new ArgumentNullException("fallbackAction");
            if (onFallback == null)
                throw new ArgumentNullException("onFallback");
            return policyBuilder.Fallback((DelegateResult<TResult> _, Context ctx, CancellationToken _) => fallbackAction(ctx), onFallback);
        }
        public static FallbackPolicy<TResult> Fallback<[System.Runtime.CompilerServices.Nullable(2)] TResult>(this PolicyBuilder<TResult> policyBuilder, Func<Context, CancellationToken, TResult> fallbackAction, Action<DelegateResult<TResult>, Context> onFallback)
        {
            if (fallbackAction == null)
                throw new ArgumentNullException("fallbackAction");
            if (onFallback == null)
                throw new ArgumentNullException("onFallback");
            return policyBuilder.Fallback((DelegateResult<TResult> _, Context ctx, CancellationToken ct) => fallbackAction(ctx, ct), onFallback);
        }
        public static FallbackPolicy<TResult> Fallback<[System.Runtime.CompilerServices.Nullable(2)] TResult>(this PolicyBuilder<TResult> policyBuilder, Func<DelegateResult<TResult>, Context, CancellationToken, TResult> fallbackAction, Action<DelegateResult<TResult>, Context> onFallback)
        {
            if (fallbackAction == null)
                throw new ArgumentNullException("fallbackAction");
            if (onFallback == null)
                throw new ArgumentNullException("onFallback");
            return new FallbackPolicy<TResult>(policyBuilder, onFallback, fallbackAction);
        }
    }
}