对于Observable,订阅订单是否保证与通知顺序相同?

时间:2017-06-14 13:55:50

标签: system.reactive

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

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

...保证在obs2.onNext

之前调用obs1.onNext

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

由于

1 个答案:

答案 0 :(得分:2)

为什么不阅读文档?

答案是,这取决于。

如果myObservable是一个观察者,当订阅者出现时会创建一个全新的管道,那么就无法保证他们会以任何顺序调用。

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

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

您始终可以Observable.Interval(TimeSpan.FromSeconds(1.0))并将.Publish()添加到最后。然后你会得到一个像Subject<int>一样的可观测量,并且可以为一个源提供多个观察者。