RxSwift - 合并如何处理同时发生的事件?

RxSwift - How does merge handle simultaneous events?

所以我有一个看起来像这样的代码:

let a = Observable.just("A").delay(.seconds(3), scheduler: MainScheduler.instance)
let b = Observable.just("B").delay(.seconds(3), scheduler: MainScheduler.instance)
Observable.merge([a, b]).subscribe(onNext: { print([=10=]) })

我认为打印顺序应该是随机的,因为稍早完成的延迟将首先通过合并发出。但是顺序似乎完全由传递给合并的数组中变量的顺序决定。

这意味着 .merge([a, b]) 打印出

A
B

但是 .merge([b, a]) 打印出

B
A

为什么会这样?这是否意味着合并以某种方式处理并发事件,我可以相信具有相同延迟的事件将始终按数组中的顺序发出?

我知道我可以使用 .from(["A", "B"]) 轻松解决它,但我现在很想知道合并究竟是如何工作的。

您将两个延迟都放在同一个线程上(我怀疑订阅也在该线程上发生,)因此它们将按照订阅的顺序在同一个线程上执行。由于 merge 的当前实现按照它接收到的顺序订阅了可观察对象,所以你会得到你所看到的行为。但是,重要的是要注意你不能依赖这个,不能保证它对每个版本的库都是正确的。