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 ([System.Runtime.CompilerServices.Nullable(2)] string operationKey, CancellationToken cancellationToken = default(CancellationToken))
{
ResilienceContext resilienceContext = _pool.Get();
resilienceContext.OperationKey = operationKey;
resilienceContext.CancellationToken = cancellationToken;
return resilienceContext;
}
public override void (ResilienceContext context)
{
_pool.Return(Guard.NotNull(context, "context"));
}
}
public static ResilienceContextPool { get; } = new SharedPool();
public ResilienceContext Get(CancellationToken cancellationToken = default(CancellationToken))
{
return Get(null, cancellationToken);
}
public abstract ResilienceContext Get([System.Runtime.CompilerServices.Nullable(2)] string operationKey, CancellationToken cancellationToken = default(CancellationToken));
public abstract void Return(ResilienceContext context);
}
}