AnonymousDisposable<TState>
Represents a Action-based disposable that can hold onto some state.
            
                using System.Runtime.CompilerServices;
using System.Threading;
namespace System.Reactive.Disposables
{
    internal sealed class AnonymousDisposable<[System.Runtime.CompilerServices.Nullable(2)] TState> : ICancelable, IDisposable
    {
        [System.Runtime.CompilerServices.Nullable(1)]
        private TState _state;
        [System.Runtime.CompilerServices.Nullable(new byte[] {
            2,
            1
        })]
        private volatile Action<TState> _dispose;
        public bool IsDisposed => _dispose == null;
        [System.Runtime.CompilerServices.NullableContext(1)]
        public AnonymousDisposable(TState state, Action<TState> dispose)
        {
            _state = state;
            _dispose = dispose;
        }
        public void Dispose()
        {
            Interlocked.Exchange<Action<TState>>(ref _dispose, (Action<TState>)null)?.Invoke(_state);
            _state = default(TState);
        }
    }
}