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