<PackageReference Include="Relativity.Transfer.Client" Version="7.2.26" />

MultipleAssignmentDisposable

using System.Threading; namespace System.Reactive.Disposables { public sealed class MultipleAssignmentDisposable : ICancelable, IDisposable { private IDisposable _current; public bool IsDisposed => Volatile.Read(ref _current) == BooleanDisposable.True; public IDisposable Disposable { get { IDisposable disposable = Volatile.Read(ref _current); if (disposable == BooleanDisposable.True) disposable = DefaultDisposable.Instance; return disposable; } set { IDisposable disposable2; for (IDisposable disposable = Volatile.Read(ref _current); disposable != BooleanDisposable.True; disposable = disposable2) { disposable2 = Interlocked.CompareExchange(ref _current, value, disposable); if (disposable == disposable2) return; } value?.Dispose(); } } public void Dispose() { IDisposable disposable = Volatile.Read(ref _current); if (disposable != BooleanDisposable.True) { disposable = Interlocked.Exchange(ref _current, BooleanDisposable.True); if (disposable != BooleanDisposable.True) disposable?.Dispose(); } } } }