问题
From the docs for the TakeUntil operator (emphasis mine):
The TakeUntil subscribes and begins mirroring the source Observable. It also monitors a second Observable that you provide. If this second Observable emits an item or sends a termination notification, the Observable returned by TakeUntil stops mirroring the source Observable and terminates.
If this is true, then why does this block?:
Observable.Never<Unit>()
.TakeUntil(Observable.Empty<Unit>())
.Wait();
回答1:
Preston Guillot is on point in the comments section.
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.
来源:https://stackoverflow.com/questions/35417909/takeuntil-not-working-as-documented