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

PolicyWrapEngine

static class PolicyWrapEngine
using System; using System.Threading; using System.Threading.Tasks; namespace Polly.Wrap { internal static class PolicyWrapEngine { internal static TResult Implementation<TResult>(Func<Context, CancellationToken, TResult> func, Context context, CancellationToken cancellationToken, ISyncPolicy<TResult> outerPolicy, ISyncPolicy<TResult> innerPolicy) { return outerPolicy.Execute((Func<Context, CancellationToken, TResult>)((Context ctx, CancellationToken ct) => innerPolicy.Execute(func, ctx, ct)), context, cancellationToken); } internal static TResult Implementation<TResult>(Func<Context, CancellationToken, TResult> func, Context context, CancellationToken cancellationToken, ISyncPolicy<TResult> outerPolicy, ISyncPolicy innerPolicy) { return outerPolicy.Execute((Func<Context, CancellationToken, TResult>)((Context ctx, CancellationToken ct) => innerPolicy.Execute<TResult>(func, ctx, ct)), context, cancellationToken); } internal static TResult Implementation<TResult>(Func<Context, CancellationToken, TResult> func, Context context, CancellationToken cancellationToken, ISyncPolicy outerPolicy, ISyncPolicy<TResult> innerPolicy) { return outerPolicy.Execute((Context ctx, CancellationToken ct) => innerPolicy.Execute(func, ctx, ct), context, cancellationToken); } internal static TResult Implementation<TResult>(Func<Context, CancellationToken, TResult> func, Context context, CancellationToken cancellationToken, ISyncPolicy outerPolicy, ISyncPolicy innerPolicy) { return outerPolicy.Execute((Context ctx, CancellationToken ct) => innerPolicy.Execute<TResult>(func, ctx, ct), context, cancellationToken); } internal static void Implementation(Action<Context, CancellationToken> action, Context context, CancellationToken cancellationToken, ISyncPolicy outerPolicy, ISyncPolicy innerPolicy) { outerPolicy.Execute(delegate(Context ctx, CancellationToken ct) { innerPolicy.Execute(action, ctx, ct); }, context, cancellationToken); } internal static async Task<TResult> ImplementationAsync<TResult>(Func<Context, CancellationToken, Task<TResult>> func, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext, IAsyncPolicy<TResult> outerPolicy, IAsyncPolicy<TResult> innerPolicy) { return await outerPolicy.ExecuteAsync((Func<Context, CancellationToken, Task<TResult>>)(async (Context ctx, CancellationToken ct) => await innerPolicy.ExecuteAsync(func, ctx, ct, continueOnCapturedContext).ConfigureAwait(continueOnCapturedContext)), context, cancellationToken, continueOnCapturedContext).ConfigureAwait(continueOnCapturedContext); } internal static async Task<TResult> ImplementationAsync<TResult>(Func<Context, CancellationToken, Task<TResult>> func, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext, IAsyncPolicy<TResult> outerPolicy, IAsyncPolicy innerPolicy) { return await outerPolicy.ExecuteAsync((Func<Context, CancellationToken, Task<TResult>>)(async (Context ctx, CancellationToken ct) => await innerPolicy.ExecuteAsync<TResult>(func, ctx, ct, continueOnCapturedContext).ConfigureAwait(continueOnCapturedContext)), context, cancellationToken, continueOnCapturedContext).ConfigureAwait(continueOnCapturedContext); } internal static async Task<TResult> ImplementationAsync<TResult>(Func<Context, CancellationToken, Task<TResult>> func, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext, IAsyncPolicy outerPolicy, IAsyncPolicy<TResult> innerPolicy) { return await outerPolicy.ExecuteAsync<TResult>((Func<Context, CancellationToken, Task<TResult>>)(async (Context ctx, CancellationToken ct) => await innerPolicy.ExecuteAsync(func, ctx, ct, continueOnCapturedContext).ConfigureAwait(continueOnCapturedContext)), context, cancellationToken, continueOnCapturedContext).ConfigureAwait(continueOnCapturedContext); } internal static async Task<TResult> ImplementationAsync<TResult>(Func<Context, CancellationToken, Task<TResult>> func, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext, IAsyncPolicy outerPolicy, IAsyncPolicy innerPolicy) { return await outerPolicy.ExecuteAsync<TResult>((Func<Context, CancellationToken, Task<TResult>>)(async (Context ctx, CancellationToken ct) => await innerPolicy.ExecuteAsync<TResult>(func, ctx, ct, continueOnCapturedContext).ConfigureAwait(continueOnCapturedContext)), context, cancellationToken, continueOnCapturedContext).ConfigureAwait(continueOnCapturedContext); } internal static async Task ImplementationAsync(Func<Context, CancellationToken, Task> action, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext, IAsyncPolicy outerPolicy, IAsyncPolicy innerPolicy) { await outerPolicy.ExecuteAsync(async delegate(Context ctx, CancellationToken ct) { await innerPolicy.ExecuteAsync(action, ctx, ct, continueOnCapturedContext).ConfigureAwait(continueOnCapturedContext); }, context, cancellationToken, continueOnCapturedContext).ConfigureAwait(continueOnCapturedContext); } } }