TakeUntil 不能按文档工作?

lbe*_*ehr 5 .net c# system.reactive

来自操作员的文档TakeUntil(强调我的):

TakeUntil 订阅并开始镜像源 Observable。它还监视您提供的第二个 Observable。如果第二个 Observable 发出一个项目或发送终止通知,则 TakeUntil 返回的 Observable 停止镜像源 Observable并终止

如果这是真的,那么为什么会阻止?:

Observable.Never<Unit>()
    .TakeUntil(Observable.Empty<Unit>())
    .Wait();
Run Code Online (Sandbox Code Playgroud)

sup*_*opi 2

Preston Guillot 在评论部分说得很对:

(旧)MSDN 文档与主 Rx 站点的文档不同,仅声明TakeUntil “从源可观察序列返回值,直到另一个可观察序列产生值”。不考虑终止的可观察量。

让我们看一下的源代码Observable.TakeUntil,具体来说class O它代表了“终结者” Observable。我们可以看到parent.OnCompleted通知是在O.OnNext和发送的O.OnError

因此,您的代码阻塞的原因是Observable.Empty(充当“终止符”)仅发出OnCompleted通知。

  • 它_可能_是设计使然,因为大多数这些错误都是在 v1 之后排序的。然而,从这篇文章的角度来看,它并不符合最少惊喜原则的设计。:-) ...并且它与 `ReactiveX` 文档不匹配。了解设计背后的基本原理会很有趣。 (3认同)