ResilienceContextPool
The pool of ResilienceContext instances.
using Polly.Utils;
using System.Runtime.CompilerServices;
using System.Threading;
namespace Polly
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
public abstract class ResilienceContextPool
{
[System.Runtime.CompilerServices.Nullable(0)]
private sealed class SharedPool : ResilienceContextPool
{
private readonly ObjectPool<ResilienceContext> = new ObjectPool<ResilienceContext>(() => new ResilienceContext(), (ResilienceContext c) => c.Reset());
public override ResilienceContext (ResilienceContextCreationArguments arguments)
{
ResilienceContext resilienceContext = _pool.Get();
resilienceContext.OperationKey = arguments.OperationKey;
resilienceContext.CancellationToken = arguments.CancellationToken;
resilienceContext.ContinueOnCapturedContext = arguments.ContinueOnCapturedContext.GetValueOrDefault();
return resilienceContext;
}
public override void (ResilienceContext context)
{
_pool.Return(Guard.NotNull(context, "context"));
}
}
private const bool ContinueOnCapturedContextDefault = false;
public static ResilienceContextPool { get; } = new SharedPool();
public ResilienceContext Get(CancellationToken cancellationToken = default(CancellationToken))
{
return Get(null, cancellationToken);
}
public ResilienceContext Get([System.Runtime.CompilerServices.Nullable(2)] string operationKey, CancellationToken cancellationToken = default(CancellationToken))
{
return Get(operationKey, null, cancellationToken);
}
public ResilienceContext Get([System.Runtime.CompilerServices.Nullable(2)] string operationKey, bool? continueOnCapturedContext, CancellationToken cancellationToken = default(CancellationToken))
{
return Get(new ResilienceContextCreationArguments(operationKey, continueOnCapturedContext, cancellationToken));
}
public ResilienceContext Get(bool continueOnCapturedContext, CancellationToken cancellationToken = default(CancellationToken))
{
return Get(new ResilienceContextCreationArguments(null, continueOnCapturedContext, cancellationToken));
}
public abstract ResilienceContext Get(ResilienceContextCreationArguments arguments);
public abstract void Return(ResilienceContext context);
}
}