R3
R3 copied to clipboard
Fix: AsObservable immediately calls Dispose on completion
As pointed out in #330, when using AsObservable() in combination with message-delaying operators such as Delay or ObserveOn, the OnCompleted signal was not properly propagated downstream.
var subject = new Subject<Unit>();
var fakeFrameProvider = new FakeFrameProvider();
subject
.AsObservable()
.ObserveOn(fakeFrameProvider)
.Subscribe(
onNext: _ => Console.WriteLine("Next"),
onCompleted: _ => Console.WriteLine("Completed")
);
subject.OnNext(Unit.Default);
fakeFrameProvider.Advance();
subject.OnCompleted();
fakeFrameProvider.Advance();
// "Completed" is not printed
The cause was that WrappedObserver is defined with AutoDisposeOnCompleted = true, and AsObservable() uses it as-is.
As a fix, AsObservable() now uses a dedicated observer.
A similar issue was also present in AsSystemObservable(), so it has been fixed as well.
This PR is stale because it has been open 180 days with no activity. Remove stale label or comment or this will be closed in 30 days.
Please keep it open.