From the docs for the TakeUntil operator (emphasis mine):
The TakeUntil subscribes and begins mirroring the source Observable. It also monitors a seco
Preston Guillot is on point in the comments section:
The (old) MSDN Documentation is different than the main Rx site's, and only states that
TakeUntil
"Returns the values from the source observable sequence until the other observable sequence produces a value." without considering terminated observables.
Let's take a look at the source code for Observable.TakeUntil
, specifically class O
which represents the "terminator" Observable
. We can see that parent.OnCompleted
notification is sent on O.OnNext
and O.OnError
.
So the reason why your code is blocking, is that Observable.Empty
(which acts as the "terminator") emits only an OnCompleted
notification.