ResiliencePipelineSyncPolicy
using System;
using System.Collections.Generic;
using System.Threading;
namespace Polly.Utilities.Wrappers
{
internal sealed class ResiliencePipelineSyncPolicy : Policy
{
private readonly ResiliencePipeline _pipeline;
public ResiliencePipelineSyncPolicy(ResiliencePipeline strategy)
: base((PolicyBuilder)null)
{
_pipeline = strategy;
}
protected override void Implementation(Action<Context, CancellationToken> action, Context context, CancellationToken cancellationToken)
{
IDictionary<string, object> oldProperties;
ResilienceContext resilienceContext = ResilienceContextFactory.Create(context, true, out oldProperties, cancellationToken);
try {
_pipeline.Execute(delegate(ResilienceContext context, (Action<Context, CancellationToken> action, Context context) state) {
state.action(state.context, context.CancellationToken);
}, resilienceContext, (action, context));
} finally {
ResilienceContextFactory.Cleanup(resilienceContext, oldProperties);
}
}
protected override TResult Implementation<TResult>(Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken)
{
IDictionary<string, object> oldProperties;
ResilienceContext resilienceContext = ResilienceContextFactory.Create(context, true, out oldProperties, cancellationToken);
try {
return _pipeline.Execute((ResilienceContext context, (Func<Context, CancellationToken, TResult> action, Context context) state) => state.action(state.context, context.CancellationToken), resilienceContext, (action, context));
} finally {
ResilienceContextFactory.Cleanup(resilienceContext, oldProperties);
}
}
}
}