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

PolicyWrap

A policy that allows two (and by recursion more) Polly policies to wrap executions of delegates.
using System; using System.Diagnostics; using System.Threading; namespace Polly.Wrap { public class PolicyWrap : Policy, IPolicyWrap, IsPolicy { private readonly ISyncPolicy _outer; private readonly ISyncPolicy _inner; public IsPolicy Outer => _outer; public IsPolicy Inner => _inner; internal override void SetPolicyContext(Context executionContext, out string priorPolicyWrapKey, out string priorPolicyKey) { priorPolicyWrapKey = executionContext.PolicyWrapKey; priorPolicyKey = executionContext.PolicyKey; if (executionContext.PolicyWrapKey == null) executionContext.PolicyWrapKey = base.PolicyKey; base.SetPolicyContext(executionContext, out string _, out string _); } internal PolicyWrap(Policy outer, ISyncPolicy inner) : base(outer.ExceptionPredicates) { _outer = outer; _inner = inner; } [DebuggerStepThrough] protected override void Implementation(Action<Context, CancellationToken> action, Context context, CancellationToken cancellationToken) { PolicyWrapEngine.Implementation(action, context, _outer, _inner, cancellationToken); } [DebuggerStepThrough] protected override TResult Implementation<TResult>(Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken) { return PolicyWrapEngine.Implementation(action, context, _outer, _inner, cancellationToken); } } }