subscribeOn
указывает, где будут происходить побочные эффекты подписки, и не гарантирует, что вы получите элементы в потоке, который он использует.Вместо этого используйте observeOn
:
Observable.combineLatest(
someObservable.observeOn(Schedulers.single()),
theOtherObservable.observeOn(Schedulers.single()),
(something, theOther) -> iAmFunction(something, theOther))
)
Что combineLatest
делает при подписке, так это подписывается на ее источники, таким образом, транзитивно вы подписываетесь на someObservable
и theOtherObservable
в потоке планировщика computation()
.Однако обратите внимание, что если someObservable
не вернет управление, theOtherObservable
не будет подписано.Всегда лучше указывать subscribeOn
как можно ближе к источнику (ам):
Observable.combineLatest(
someObservable.subscribeOn(Schedulers.computation()),
theOtherObservable.subscribeOn(Schedulers.computation()),
(something, theOther) -> iAmFunction(something, theOther))
)