diff --git a/Rx.NET/Source/src/System.Reactive/Linq/Observable/AppendPrepend.cs b/Rx.NET/Source/src/System.Reactive/Linq/Observable/AppendPrepend.cs index c4eef9ffcd..cf1c11b7fc 100644 --- a/Rx.NET/Source/src/System.Reactive/Linq/Observable/AppendPrepend.cs +++ b/Rx.NET/Source/src/System.Reactive/Linq/Observable/AppendPrepend.cs @@ -308,8 +308,6 @@ private void Loop(State state, ICancelable cancel) break; } } - - base.Dispose(); } } } diff --git a/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/AppendPrependTest.cs b/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/AppendPrependTest.cs index 8ac4ab3d52..7f329e9f3c 100644 --- a/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/AppendPrependTest.cs +++ b/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/AppendPrependTest.cs @@ -2,6 +2,8 @@ // The .NET Foundation licenses this file to you under the Apache 2.0 License. // See the LICENSE file in the project root for more information. +using System; +using System.Reactive.Concurrency; using System.Reactive.Linq; using Microsoft.Reactive.Testing; using Xunit; @@ -310,5 +312,46 @@ public void AppendPrepend_MixedSchedulers() OnCompleted(252) ); } + + [Fact] + public void AppendPrepend_SchedulerRecursive() + { + var scheduler = new EventLoopScheduler(); + + var source = Observable.Range(1, 1000).DelaySubscription(TimeSpan.FromMilliseconds(100), ThreadPoolScheduler.Instance); + + var result = source.Prepend(0, scheduler).Prepend(-1, scheduler) + .Timeout(TimeSpan.FromSeconds(5)) + .ToList().First(); + + Assert.Equal(1002, result.Count); + + var j = 0; + for (var i = -1; i <= 1000; i++) + { + Assert.Equal(i, result[j++]); + } + } + + [Fact] + public void AppendPrepend_SchedulerLongRunning() + { + var scheduler = NewThreadScheduler.Default; + Assert.True(scheduler is ISchedulerLongRunning, "Not a long-running scheduler!"); + + var source = Observable.Range(1, 1000).DelaySubscription(TimeSpan.FromMilliseconds(100), ThreadPoolScheduler.Instance); + + var result = source.Prepend(0, scheduler).Prepend(-1, scheduler) + .Timeout(TimeSpan.FromSeconds(5)) + .ToList().First(); + + Assert.Equal(1002, result.Count); + + var j = 0; + for (var i = -1; i <= 1000; i++) + { + Assert.Equal(i, result[j++]); + } + } } }