extension Observable {
func dispatchAsyncMainScheduler() -> Observable<E> {
return self.observeOn(backgroundScheduler).observeOn(MainScheduler.instance)
}
}
我在https://github.com/artsy/eidolon找到了这个片段
我是这里的reactive
初学者。据我所知。 subscribeOn
适用于整个链,而observeOn
适用于它下面的运算符。
我的问题很明显,这两个连续的observeOn
究竟做了什么?
这不是一个错字。如果你看一下这个算子上面的backgroundScheduler
10行的定义,你会发现它是一个SerialDispatchQueueSceduler
。这意味着它将操作排队并在后台线程上按顺序执行它们。
他们正在使用它来避免重入异常。我假设这个代码是在MainScheduler.asyncInstance
被放入库之前编写的,它做同样的事情。
更多信息可以在Rx库中找到:
- 问题:此行为违反了可观察的序列语法。
next (error | completed)?
此行为会破坏语法,因为序列事件之间存在重叠。可观察序列试图在发送先前事件之前发送事件。- 解释:这可能意味着您的代码中存在某种意外的循环依赖关系,或者系统未按预期方式运行。
- 补救措施:如果这是预期的行为,可以通过添加
.observeOn(MainScheduler.asyncInstance)
或以其他方式排列序列事件来抑制此消息。
看起来像是一个错字。应该是.subscribeOn(backgroundScheduler)