[英]Question about a custom RxSwift Observable extension
extension Observable {
func dispatchAsyncMainScheduler() -> Observable<E> {
return self.observeOn(backgroundScheduler).observeOn(MainScheduler.instance)
}
}
我在https://github.com/artsy/eidolon中找到了这个片段
我是一位reactive
初学者。 据我了解。 subscribeOn
适用,而整个产业链observeOn
低于其应用于运营商。
我的问题很明显,这两个连续的observeOn
做什么?
这不是错字。 如果查看此操作符上方10行的backgroundScheduler
的定义,您会看到它是SerialDispatchQueueSceduler
。 这意味着它将排队操作并在后台线程上按顺序执行它们。
他们正在使用它来避免重入异常。 我假设这段代码是在MainScheduler.asyncInstance
放入库之前MainScheduler.asyncInstance
的,它具有相同的作用。
可以在Rx库中找到更多信息:
- 问题:此行为破坏了可观察的序列语法。
next (error | completed)?
此行为破坏了语法,因为序列事件之间存在重叠。 可观察到的序列正在尝试发送事件,而先前事件的发送尚未完成。- 解释:这可能意味着您的代码中存在某种意外的循环依赖关系,或者系统未按照预期的方式运行。
- 补救措施:如果这是预期的行为,则可以通过添加
.observeOn(MainScheduler.asyncInstance)
或通过以其他某种方式排队序列事件来抑制此消息。
对我来说似乎是一个错字。 应该是.subscribeOn(backgroundScheduler)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.