我有点困惑,你可以称之为订阅和观察方法的可观察的顺序.我读了几个帖子,一个人说没关系,只是在他的例子中使用的东西,而其他人说这很重要.所以这里是我的问题:
例如:
self.remoteService.rxGetAllLanguages()
.observeOn(MainScheduler.instance)
.subscribeOn(ConcurrentdispatchQueueScheduler(globalConcurrentQueueQOS: .Background))
.subscribe({ e in
switch e {
case .Next(let element):
case .Error(let e):
DDLogError("Error in \(e)")
case .Completed:
DDLogDebug("Completed")
}
}
).adddisposableto(self.disposeBag)
是这样的:
self.remoteService.rxGetAllLanguages()
.subscribeOn(ConcurrentdispatchQueueScheduler(globalConcurrentQueueQOS: .Background))
.observeOn(MainScheduler.instance)
.subscribe({ e in
switch e {
case .Next(let element):
case .Error(let e):
DDLogError("Error in \(e)")
case .Completed:
DDLogDebug("Completed")
}
}
).adddisposableto(self.disposeBag)
如果我正确地理解他们不同的机制.第一个在主线程上做所有的工作,第二个在另一个线程上执行所有的工作,然后发回到主线程.但是我肯定肯定有人可以为我清除这个吗?
你在一个链中称为subscribeOn()并不重要.在哪里调用observeOn()是重要的.
subscribeOn()告诉整个链,哪个线程开始处理.你应该只链接一次.如果您再次将其称为低级流,则不起作用.
observeOn()导致在其下发生的所有操作在指定的调度程序上执行.每个流可以多次调用它,以便在不同的线程之间移动.
举个例子:
doSomethingRx()
.subscribeOn(BackgroundScheduler)
.doAnotherThing()
.observeOn(computationScheduler)
.doSomethingElse()
.observeOn(MainScheduler)
.subscribe(//...)
> subscribeOn导致在BackgroundScheduler上调用doSomethingRx.> doAnotherThing将在BackgroundScheduler上继续>然后观察将流切换到computationScheduler> doSomethingElse将发生在computationScheduler上>另一个observeOn将流切换到MainScheduler>订阅发生在MainScheduler上