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

AsyncPolicyWrap

using System; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; namespace Polly.Wrap { public class AsyncPolicyWrap : AsyncPolicy, IPolicyWrap, IsPolicy { private readonly IAsyncPolicy _outer; private readonly IAsyncPolicy _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 AsyncPolicyWrap(AsyncPolicy outer, IAsyncPolicy inner) : base(outer.ExceptionPredicates) { _outer = outer; _inner = inner; } [DebuggerStepThrough] protected override Task ImplementationAsync(Func<Context, CancellationToken, Task> action, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext) { return AsyncPolicyWrapEngine.ImplementationAsync(action, context, cancellationToken, continueOnCapturedContext, _outer, _inner); } [DebuggerStepThrough] protected override Task<TResult> ImplementationAsync<TResult>(Func<Context, CancellationToken, Task<TResult>> action, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext) { return AsyncPolicyWrapEngine.ImplementationAsync(action, context, cancellationToken, continueOnCapturedContext, _outer, _inner); } } }