<PackageReference Include="System.Reactive" Version="6.0.1" />

AnonymousDisposable<TState>

sealed class AnonymousDisposable<TState> : ICancelable, IDisposable
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); } } }