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

BulkheadPolicy<TResult>

public class BulkheadPolicy<TResult> : Policy<TResult>, IDisposable
A bulkhead-isolation policy which can be applied to delegates returning a value of type .
using Polly.Utilities; using System; using System.Threading; using System.Threading.Tasks; namespace Polly.Bulkhead { public class BulkheadPolicy<TResult> : Policy<TResult>, 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(Func<Func<CancellationToken, TResult>, Context, CancellationToken, TResult> executionPolicy, int maxParallelization, int maxQueueingActions, SemaphoreSlim maxParallelizationSemaphore, SemaphoreSlim maxQueuedActionsSemaphore) : base(executionPolicy, PredicateHelper.EmptyExceptionPredicates, PredicateHelper<TResult>.EmptyResultPredicates) { _maxParallelization = maxParallelization; _maxQueueingActions = maxQueueingActions; _maxParallelizationSemaphore = maxParallelizationSemaphore; _maxQueuedActionsSemaphore = maxQueuedActionsSemaphore; } public void Dispose() { _maxParallelizationSemaphore.Dispose(); _maxQueuedActionsSemaphore.Dispose(); } internal BulkheadPolicy(Func<Func<CancellationToken, Task<TResult>>, Context, CancellationToken, bool, Task<TResult>> asyncExecutionPolicy, int maxParallelization, int maxQueueingActions, SemaphoreSlim maxParallelizationSemaphore, SemaphoreSlim maxQueuedActionsSemaphore) : base(asyncExecutionPolicy, PredicateHelper.EmptyExceptionPredicates, PredicateHelper<TResult>.EmptyResultPredicates) { _maxParallelization = maxParallelization; _maxQueueingActions = maxQueueingActions; _maxParallelizationSemaphore = maxParallelizationSemaphore; _maxQueuedActionsSemaphore = maxQueuedActionsSemaphore; } } }