<PackageReference Include="Polly" Version="8.0.0-alpha.7" />

PolicyWrapEngine

static class PolicyWrapEngine
using System; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; using System; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; namespace Polly.Timeout { public class TimeoutPolicy : Policy, ITimeoutPolicy, IsPolicy { private Func<Context, TimeSpan> _timeoutProvider; private TimeoutStrategy _timeoutStrategy; private Action<Context, TimeSpan, Task, Exception> _onTimeout; internal TimeoutPolicy(Func<Context, TimeSpan> timeoutProvider, TimeoutStrategy timeoutStrategy, Action<Context, TimeSpan, Task, Exception> onTimeout) : base((PolicyBuilder)null) { if (timeoutProvider == null) throw new ArgumentNullException("timeoutProvider"); _timeoutProvider = timeoutProvider; _timeoutStrategy = timeoutStrategy; if (onTimeout == null) throw new ArgumentNullException("onTimeout"); _onTimeout = onTimeout; } [DebuggerStepThrough] protected override TResult Implementation<TResult>(Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken) { return TimeoutEngine.Implementation(action, context, cancellationToken, _timeoutProvider, _timeoutStrategy, _onTimeout); } } } 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); } } }