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

PolicyWrap<TResult>

public class PolicyWrap<TResult> : Policy<TResult>, IPolicyWrap<TResult>, IPolicyWrap, IsPolicy
using System; using System.Threading; namespace Polly.Wrap { public class PolicyWrap<TResult> : Policy<TResult>, IPolicyWrap<TResult>, IPolicyWrap, IsPolicy { private readonly ISyncPolicy _outerNonGeneric; private readonly ISyncPolicy _innerNonGeneric; private readonly ISyncPolicy<TResult> _outerGeneric; private readonly ISyncPolicy<TResult> _innerGeneric; public IsPolicy Outer { get { IsPolicy outerGeneric = _outerGeneric; return outerGeneric ?? _outerNonGeneric; } } public IsPolicy Inner { get { IsPolicy innerGeneric = _innerGeneric; return innerGeneric ?? _innerNonGeneric; } } 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<TResult> inner) : base(outer.ExceptionPredicates, ResultPredicates<TResult>.None) { _outerNonGeneric = outer; _innerGeneric = inner; } internal PolicyWrap(Policy<TResult> outer, ISyncPolicy inner) : base(outer.ExceptionPredicates, outer.ResultPredicates) { _outerGeneric = outer; _innerNonGeneric = inner; } internal PolicyWrap(Policy<TResult> outer, ISyncPolicy<TResult> inner) : base(outer.ExceptionPredicates, outer.ResultPredicates) { _outerGeneric = outer; _innerGeneric = inner; } protected override TResult Implementation(Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken) { if (_outerNonGeneric != null) { if (_innerNonGeneric != null) return PolicyWrapEngine.Implementation<TResult>(action, context, cancellationToken, _outerNonGeneric, _innerNonGeneric); if (_innerGeneric != null) return PolicyWrapEngine.Implementation<TResult>(action, context, cancellationToken, _outerNonGeneric, _innerGeneric); throw new InvalidOperationException("A PolicyWrap must define an inner policy."); } if (_outerGeneric != null) { if (_innerNonGeneric != null) return PolicyWrapEngine.Implementation<TResult>(action, context, cancellationToken, _outerGeneric, _innerNonGeneric); if (_innerGeneric != null) return PolicyWrapEngine.Implementation<TResult>(action, context, cancellationToken, _outerGeneric, _innerGeneric); throw new InvalidOperationException("A PolicyWrap must define an inner policy."); } throw new InvalidOperationException("A PolicyWrap must define an outer policy."); } } }