<PackageReference Include="Polly.Core" Version="8.5.0" />

ComponentDisposeHelper

using System; using System.Runtime.CompilerServices; using System.Threading.Tasks; namespace Polly.Utils.Pipeline { internal sealed class ComponentDisposeHelper : IAsyncDisposable { [System.Runtime.CompilerServices.Nullable(1)] private readonly PipelineComponent _component; private readonly DisposeBehavior _disposeBehavior; private bool _disposed; [System.Runtime.CompilerServices.NullableContext(1)] public ComponentDisposeHelper(PipelineComponent component, DisposeBehavior disposeBehavior) { _component = component; _disposeBehavior = disposeBehavior; } public ValueTask DisposeAsync() { if (EnsureDisposable()) return ForceDisposeAsync(); return default(ValueTask); } public void EnsureNotDisposed() { if (_disposed) throw new ObjectDisposedException("ResiliencePipeline", "This resilience pipeline has been disposed and cannot be used anymore."); } public ValueTask ForceDisposeAsync() { _disposed = true; return _component.DisposeAsync(); } private bool EnsureDisposable() { if (_disposeBehavior == DisposeBehavior.Ignore) return false; if (_disposeBehavior == DisposeBehavior.Reject) throw new InvalidOperationException("Disposing this resilience pipeline is not allowed because it is owned by the pipeline registry."); return !_disposed; } } }