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 sealed 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();
        }
    }
}