diff --git a/Rx.NET/Source/src/System.Reactive/Linq/Observable/Switch.cs b/Rx.NET/Source/src/System.Reactive/Linq/Observable/Switch.cs index 3e9d743ffd..139f4ae388 100644 --- a/Rx.NET/Source/src/System.Reactive/Linq/Observable/Switch.cs +++ b/Rx.NET/Source/src/System.Reactive/Linq/Observable/Switch.cs @@ -17,7 +17,7 @@ public Switch(IObservable> sources) protected override _ CreateSink(IObserver observer) => new _(observer); - protected override void Run(_ sink) => sink.Run(this); + protected override void Run(_ sink) => sink.Run(_sources); internal sealed class _ : Sink, TSource> { @@ -28,28 +28,16 @@ public _(IObserver observer) { } - private IDisposable _sourceDisposable; private IDisposable _innerSerialDisposable; private bool _isStopped; private ulong _latest; private bool _hasLatest; - public void Run(Switch parent) - { - _isStopped = false; - _latest = 0UL; - _hasLatest = false; - - Disposable.SetSingle(ref _sourceDisposable, parent._sources.SubscribeSafe(this)); - } - protected override void Dispose(bool disposing) { if (disposing) - { Disposable.TryDispose(ref _innerSerialDisposable); - Disposable.TryDispose(ref _sourceDisposable); - } + base.Dispose(disposing); } @@ -77,7 +65,7 @@ public override void OnCompleted() { lock (_gate) { - Disposable.TryDispose(ref _sourceDisposable); + DisposeUpstream(); _isStopped = true; if (!_hasLatest)