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 val = ResilienceContextFactory.Create(context, cancellationToken, true, out oldProperties);
try {
return _pipeline.Execute<TResult, (Func<Context, CancellationToken, TResult>, Context)>((Func<ResilienceContext, (Func<Context, CancellationToken, TResult>, Context), TResult>)((ResilienceContext context, (Func<Context, CancellationToken, TResult> action, Context context) state) => state.action(state.context, context.get_CancellationToken())), val, (action, context));
} finally {
ResilienceContextFactory.Cleanup(val, oldProperties);
}
}
}
}