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