system.reactive - 对于 Observable,订阅顺序是否保证与通知顺序相同?

标签 system.reactive

我想知道,如果给定以下 RX 代码:

myObservable.subscribe(obs1)
myObservable.subscribe(obs2)

...保证在 obs2.onNext 之前调用 obs1.onNext

PS:从我的角度来看,编写依赖于订阅顺序的代码是一种不好的做法,但我很好奇 RX 文档中是否有任何此类保证。

谢谢

最佳答案

你为什么不阅读文档?

答案是,这取决于。

myObservable是一个 observable,它在订阅者出现时创建一个全新的管道,然后不能保证他们会以任何顺序调用。

例如,Observable.Interval(TimeSpan.FromSeconds(1.0))当订阅者出现时,将创建一个全新的管道。两个订阅者然后是两个管道。

但是,如果 myObservableSubject<int>那么观察者附加的顺序是关键。一次只有一个观察者会收到值,并且会按顺序完成。这是所有订阅者的共享管道。

您可以随时取Observable.Interval(TimeSpan.FromSeconds(1.0))并添加 .Publish()到最后。然后你会得到一个行为类似于 Subject<int> 的 observable并且可以对一个源有多个观察者。

关于system.reactive - 对于 Observable,订阅顺序是否保证与通知顺序相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44546885/

相关文章:

haskell - FRP 是否有一组 "complete"函数/运算符?

c# - Rx .NET 首先获取并在时间间隔或条件之后跳过

Rx 的 F# 工作流构建器

c# - 如何在 Reactive Extensions (Rx) 中观察依赖事件?

c# - 在 Rx Finally 中使用 async () => 的替代方法

system.reactive - 对于 Buffer 等运算符来说,打开和关闭边界的含义是什么?

java - RxJava 与顶点 : can't have multiple subscriptions exception

.net - 如何使用 Rx 以非阻塞方式观察值?

c# - 在 Rx 中实现滑动窗口的问题

rabbitmq - RX 与 rabbitmq 或 zeromq 等消息队列的对比?