<PackageReference Include="Polly" Version="4.5.0-beta-netstandar-0001" />

ContextualPolicy

public class ContextualPolicy : Policy
Transient exception handling policies that can be applied to delegates. These policies can be called with arbitrary context data.
using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; namespace Polly { public class ContextualPolicy : Policy { internal ContextualPolicy(Action<Action, Context> exceptionPolicy, IEnumerable<ExceptionPredicate> exceptionPredicates) : base(exceptionPolicy, exceptionPredicates) { } [DebuggerStepThrough] public void Execute(Action action, IDictionary<string, object> contextData) { if (contextData == null) throw new ArgumentNullException("contextData"); base.Execute(action, new Context(contextData)); } [DebuggerStepThrough] public PolicyResult ExecuteAndCapture(Action action, IDictionary<string, object> contextData) { if (contextData == null) throw new ArgumentNullException("contextData"); return base.ExecuteAndCapture(action, new Context(contextData)); } [DebuggerStepThrough] public TResult Execute<TResult>(Func<TResult> action, IDictionary<string, object> contextData) { if (contextData == null) throw new ArgumentNullException("contextData"); return base.Execute(action, new Context(contextData)); } [DebuggerStepThrough] public PolicyResult<TResult> ExecuteAndCapture<TResult>(Func<TResult> action, IDictionary<string, object> contextData) { if (contextData == null) throw new ArgumentNullException("contextData"); return base.ExecuteAndCapture(action, new Context(contextData)); } internal ContextualPolicy(Func<Func<CancellationToken, Task>, Context, CancellationToken, bool, Task> asyncExceptionPolicy, IEnumerable<ExceptionPredicate> exceptionPredicates) : base(asyncExceptionPolicy, exceptionPredicates) { } [DebuggerStepThrough] public Task ExecuteAsync(Func<Task> action, IDictionary<string, object> contextData) { return ExecuteAsync((CancellationToken ct) => action(), contextData, CancellationToken.None, false); } [DebuggerStepThrough] public Task ExecuteAsync(Func<Task> action, IDictionary<string, object> contextData, bool continueOnCapturedContext) { return ExecuteAsync((CancellationToken ct) => action(), contextData, CancellationToken.None, continueOnCapturedContext); } [DebuggerStepThrough] public Task ExecuteAsync(Func<CancellationToken, Task> action, IDictionary<string, object> contextData, CancellationToken cancellationToken) { return ExecuteAsync(action, contextData, cancellationToken, false); } [DebuggerStepThrough] public Task ExecuteAsync(Func<CancellationToken, Task> action, IDictionary<string, object> contextData, CancellationToken cancellationToken, bool continueOnCapturedContext) { if (contextData == null) throw new ArgumentNullException("contextData"); return base.ExecuteAsync(action, new Context(contextData), cancellationToken, continueOnCapturedContext); } [DebuggerStepThrough] public Task<PolicyResult> ExecuteAndCaptureAsync(Func<Task> action, IDictionary<string, object> contextData) { if (contextData == null) throw new ArgumentNullException("contextData"); return base.ExecuteAndCaptureAsync(action, new Context(contextData)); } [DebuggerStepThrough] public Task<PolicyResult> ExecuteAndCaptureAsync(Func<Task> action, IDictionary<string, object> contextData, bool continueOnCapturedContext) { if (contextData == null) throw new ArgumentNullException("contextData"); return base.ExecuteAndCaptureAsync(action, new Context(contextData), continueOnCapturedContext); } [DebuggerStepThrough] public Task<PolicyResult> ExecuteAndCaptureAsync(Func<CancellationToken, Task> action, IDictionary<string, object> contextData, CancellationToken cancellationToken) { if (contextData == null) throw new ArgumentNullException("contextData"); return base.ExecuteAndCaptureAsync(action, new Context(contextData), cancellationToken); } [DebuggerStepThrough] public Task<PolicyResult> ExecuteAndCaptureAsync(Func<CancellationToken, Task> action, IDictionary<string, object> contextData, CancellationToken cancellationToken, bool continueOnCapturedContext) { if (contextData == null) throw new ArgumentNullException("contextData"); return base.ExecuteAndCaptureAsync(action, new Context(contextData), cancellationToken, continueOnCapturedContext); } [DebuggerStepThrough] public Task<TResult> ExecuteAsync<TResult>(Func<Task<TResult>> action, IDictionary<string, object> contextData) { return ExecuteAsync((CancellationToken ct) => action(), contextData, CancellationToken.None, false); } [DebuggerStepThrough] public Task<TResult> ExecuteAsync<TResult>(Func<Task<TResult>> action, IDictionary<string, object> contextData, bool continueOnCapturedContext) { return ExecuteAsync((CancellationToken ct) => action(), contextData, CancellationToken.None, continueOnCapturedContext); } [DebuggerStepThrough] public Task<TResult> ExecuteAsync<TResult>(Func<CancellationToken, Task<TResult>> action, IDictionary<string, object> contextData, CancellationToken cancellationToken) { return ExecuteAsync(action, contextData, cancellationToken, false); } [DebuggerStepThrough] public Task<TResult> ExecuteAsync<TResult>(Func<CancellationToken, Task<TResult>> action, IDictionary<string, object> contextData, CancellationToken cancellationToken, bool continueOnCapturedContext) { if (contextData == null) throw new ArgumentNullException("contextData"); return base.ExecuteAsync(action, new Context(contextData), cancellationToken, continueOnCapturedContext); } [DebuggerStepThrough] public Task<PolicyResult<TResult>> ExecuteAndCaptureAsync<TResult>(Func<Task<TResult>> action, IDictionary<string, object> contextData) { if (contextData == null) throw new ArgumentNullException("contextData"); return base.ExecuteAndCaptureAsync(action, new Context(contextData)); } [DebuggerStepThrough] protected Task<PolicyResult<TResult>> ExecuteAndCaptureAsync<TResult>(Func<Task<TResult>> action, IDictionary<string, object> contextData, bool continueOnCapturedContext) { if (contextData == null) throw new ArgumentNullException("contextData"); return base.ExecuteAndCaptureAsync(action, new Context(contextData), continueOnCapturedContext); } [DebuggerStepThrough] public Task<PolicyResult<TResult>> ExecuteAndCaptureAsync<TResult>(Func<Task<TResult>> action, IDictionary<string, object> contextData, CancellationToken cancellationToken) { if (contextData == null) throw new ArgumentNullException("contextData"); return base.ExecuteAndCaptureAsync(action, new Context(contextData), cancellationToken); } [DebuggerStepThrough] public Task<PolicyResult<TResult>> ExecuteAndCaptureAsync<TResult>(Func<CancellationToken, Task<TResult>> action, IDictionary<string, object> contextData, CancellationToken cancellationToken, bool continueOnCapturedContext) { if (contextData == null) throw new ArgumentNullException("contextData"); return base.ExecuteAndCaptureAsync(action, new Context(contextData), cancellationToken, continueOnCapturedContext); } } }