diff --git a/Rx.NET/Source/src/System.Reactive/Linq/Observable/Delay.cs b/Rx.NET/Source/src/System.Reactive/Linq/Observable/Delay.cs index d9ad920373..d0342a7cdb 100644 --- a/Rx.NET/Source/src/System.Reactive/Linq/Observable/Delay.cs +++ b/Rx.NET/Source/src/System.Reactive/Linq/Observable/Delay.cs @@ -657,7 +657,7 @@ public override void OnCompleted() lock (_gate) { _atEnd = true; - _subscription.Dispose(); + Disposable.TryDispose(ref _subscription); CheckDone(); } diff --git a/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/DelayTest.cs b/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/DelayTest.cs index fa9a6f8efc..94255cf550 100644 --- a/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/DelayTest.cs +++ b/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/DelayTest.cs @@ -1813,6 +1813,17 @@ public void Delay_LongRunning_CancelLate() e.WaitOne(); } + [Fact] + public void Delay_Selector_Immediate() + { + var result = 0; + var source = Observable.Return(1); + var delayed = source.Delay(_ => Observable.Return(2)); + delayed.Subscribe(v => result = v); + + Assert.Equal(1, result); + } + private class MyLongRunning2 : LocalScheduler, ISchedulerLongRunning { private ManualResetEvent _start;