<PackageReference Include="Polly" Version="5.9.0" />

BulkheadPolicy

A bulkhead-isolation policy which can be applied to delegates.
using Polly.Utilities; using System; using System.Threading; using System.Threading.Tasks; namespace Polly.Bulkhead { public class BulkheadPolicy : Policy, IBulkheadPolicy, IsPolicy, IDisposable { private readonly SemaphoreSlim _maxParallelizationSemaphore; private readonly SemaphoreSlim _maxQueuedActionsSemaphore; private readonly int _maxParallelization; private readonly int _maxQueueingActions; public int BulkheadAvailableCount => _maxParallelizationSemaphore.CurrentCount; public int QueueAvailableCount => Math.Min(_maxQueuedActionsSemaphore.CurrentCount, _maxQueueingActions); internal BulkheadPolicy(Action<Action<Context, CancellationToken>, Context, CancellationToken> exceptionPolicy, int maxParallelization, int maxQueueingActions, SemaphoreSlim maxParallelizationSemaphore, SemaphoreSlim maxQueuedActionsSemaphore) : base(exceptionPolicy, PredicateHelper.EmptyExceptionPredicates) { _maxParallelization = maxParallelization; _maxQueueingActions = maxQueueingActions; _maxParallelizationSemaphore = maxParallelizationSemaphore; _maxQueuedActionsSemaphore = maxQueuedActionsSemaphore; } public void Dispose() { _maxParallelizationSemaphore.Dispose(); _maxQueuedActionsSemaphore.Dispose(); } internal BulkheadPolicy(Func<Func<Context, CancellationToken, Task>, Context, CancellationToken, bool, Task> asyncExceptionPolicy, int maxParallelization, int maxQueueingActions, SemaphoreSlim maxParallelizationSemaphore, SemaphoreSlim maxQueuedActionsSemaphore) : base(asyncExceptionPolicy, PredicateHelper.EmptyExceptionPredicates) { _maxParallelization = maxParallelization; _maxQueueingActions = maxQueueingActions; _maxParallelizationSemaphore = maxParallelizationSemaphore; _maxQueuedActionsSemaphore = maxQueuedActionsSemaphore; } } }