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);
}
}
}