<PackageReference Include="System.Reactive" Version="7.0.0-preview.1" />

AnonymousDisposable

using System.Runtime.CompilerServices; using System.Threading; namespace System.Reactive.Disposables { internal sealed class AnonymousDisposable : ICancelable, IDisposable { [Nullable(2)] private volatile Action _dispose; public bool IsDisposed => _dispose == null; [NullableContext(1)] public AnonymousDisposable(Action dispose) { _dispose = dispose; } public void Dispose() { Interlocked.Exchange(ref _dispose, null)?.Invoke(); } } }