ResiliencePipelineSyncPolicy<TResult>
using System;
using System.Collections.Generic;
using System.Threading;
namespace Polly.Utilities.Wrappers
{
internal sealed class ResiliencePipelineSyncPolicy<TResult> : Policy<TResult>
{
private readonly ResiliencePipeline<TResult> _pipeline;
public ResiliencePipelineSyncPolicy(ResiliencePipeline<TResult> strategy)
: base((PolicyBuilder<TResult>)null)
{
_pipeline = strategy;
}
protected override TResult Implementation(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);
}
}
}
}