我有点困惑,你可以称之为订阅和观察方法的可观察的顺序.我读了几个帖子,一个人说没关系,只是在他的例子中使用的东西,而其他人说这很重要.所以这里是我的问题:
例如:
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上