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

FallbackEngine

static class FallbackEngine
using System; using System.Runtime.CompilerServices; using System.Threading; namespace Polly.Fallback { internal static class FallbackEngine { [System.Runtime.CompilerServices.NullableContext(1)] internal static TResult Implementation<[System.Runtime.CompilerServices.Nullable(2)] TResult>(Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken, ExceptionPredicates shouldHandleExceptionPredicates, ResultPredicates<TResult> shouldHandleResultPredicates, Action<DelegateResult<TResult>, Context> onFallback, Func<DelegateResult<TResult>, Context, CancellationToken, TResult> fallbackAction) { DelegateResult<TResult> arg; try { cancellationToken.ThrowIfCancellationRequested(); TResult result = action(context, cancellationToken); if (!shouldHandleResultPredicates.AnyMatch(result)) return result; arg = new DelegateResult<TResult>(result); } catch (Exception ex) { Exception ex2 = shouldHandleExceptionPredicates.FirstMatchOrDefault(ex); if (ex2 == null) throw; arg = new DelegateResult<TResult>(ex2); } onFallback(arg, context); return fallbackAction(arg, context, cancellationToken); } } }