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

SerialDisposable

public sealed class SerialDisposable : ICancelable, IDisposable
Represents a disposable resource whose underlying disposable resource can be replaced by another disposable resource, causing automatic disposal of the previous underlying disposable resource.
namespace System.Reactive.Disposables { public sealed class SerialDisposable : ICancelable, IDisposable { private IDisposable _current; public bool IsDisposed => System.Reactive.Disposables.Disposable.GetIsDisposed(ref _current); public IDisposable Disposable { get { return System.Reactive.Disposables.Disposable.GetValue(ref _current); } set { System.Reactive.Disposables.Disposable.TrySetSerial(ref _current, value); } } public void Dispose() { System.Reactive.Disposables.Disposable.TryDispose(ref _current); } } }