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

ComponentWithDisposeCallbacks

using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Threading.Tasks; namespace Polly.Utils.Pipeline { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] internal class ComponentWithDisposeCallbacks : PipelineComponent { private readonly List<Action> _callbacks; internal PipelineComponent Component { get; } public ComponentWithDisposeCallbacks(PipelineComponent component, List<Action> callbacks) { Component = component; _callbacks = callbacks; } public override ValueTask DisposeAsync() { ExecuteCallbacks(); return Component.DisposeAsync(); } [return: System.Runtime.CompilerServices.Nullable(new byte[] { 0, 0, 1 })] internal override ValueTask<Outcome<TResult>> ExecuteCore<[System.Runtime.CompilerServices.Nullable(2)] TResult, [System.Runtime.CompilerServices.Nullable(2)] TState>([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 1, 1, 0, 0, 1 })] Func<ResilienceContext, TState, ValueTask<Outcome<TResult>>> callback, ResilienceContext context, TState state) { return Component.ExecuteCore(callback, context, state); } private void ExecuteCallbacks() { foreach (Action callback in _callbacks) { callback(); } _callbacks.Clear(); } } }