Jestem trochę zdezorientowany, jeśli chodzi o zlecenie, które można nazwać metodami subscribeOn
i observeOn
w obserwatorach. Przeczytałem kilka postów i jeden facet mówi, że to nie ma znaczenia i po prostu używa rzeczy w swoim przykładzie, a inni mówią, że to ma znaczenie. Więc tutaj jest moje pytanie:Czy kolejność subskrybowania i obserwowania ma znaczenie?
Na przykład:
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)
Czy to tak samo jak:
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)
Gdybym poprawnie zrozumieć mechanizmy są one różne. Pierwszy wykonuje całą pracę nad głównym wątkiem, a drugi wykonuje całą pracę nad innym wątkiem, a następnie przesyła z powrotem do głównego wątku. Ale jestem pewien, czy ktoś może to dla mnie wyjaśnić?
Witam @Jahnold, dokumentacja RxSwift mówi: "Jeśli chcesz rozpocząć generowanie sekwencji (metoda subskrypcji) i wywołać utylizację określonego programu planującego, użyj funkcji subscribeOn (scheduler)." Czy to oznacza, że jeśli określimy subscribeOn (:), uruchomi on łańcuch określony na podanym wątku, także dispos disposable zostanie wywołany na tym samym określonym wątku? – iamyogish