Sono un po 'confuso circa l'ordine è possibile chiamare i metodi subscribeOn
e observeOn
su osservabili. Ho letto un paio di post e un tizio dice che non ha importanza e usa solo le cose nel suo esempio e altre persone dicono che è importante. Quindi ecco la mia domanda:L'ordine di subscribeOn e observOn importa?
Ad esempio:
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)
è che lo stesso come:
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)
Se ho capito bene i meccanismi sono diversi. Il primo esegue tutto il lavoro sul thread principale e il secondo esegue tutto il lavoro su un altro thread e quindi torna al thread principale. Ma sono sicuro che sia così qualcuno può chiarirlo per me, per favore?
Hi @Jahnold, la documentazione RxSwift dice: "Se si desidera avviare la generazione della sequenza (metodo subscribe) e chiamare lo smaltimento su uno schedulatore specifico, utilizzare subscribeOn (scheduler)." Questo significa che se si specifica subscribeOn (:), avvierà la catena su specificato nel thread specificato, anche lo smaltimento del disposable sarà chiamato sullo stesso thread specificato? – iamyogish