Como faço para executar `Observáveis` em um thread separado?
-
21-12-2019 - |
Pergunta
Eu uso RxJava em Scala projeto e dizer que eu tenho este simples Observable
:
Observable[String](observer => while (true) observer onNext "hi")
.subscribe(v => println(v))
println("hello")
Eu nunca vai chegar a mensagem "hello" porque while
blocos de um thread.Como posso executar meu Observable
em um thread separado para evitar o bloqueio?
==================================
Eu estava pensando observeOn
poderia ajudar, mas ele não.Com isso:
val s = rx.lang.scala.schedulers.NewThreadScheduler.apply
Observable[String](observer => while (true) observer onNext "hi")
.observeOn(s).subscribe(v => println(v))
println("hello")
...ainda não imprimir "olá".Eu acho que a adição de observeOn
faz OnNext
para ser chamado em uma thread separada, mas não um while
bloco de si?
==================================
Claro que eu poderia moldar while
em um Future
:
Observable[String](observer => Future { while (true) observer onNext "hi" })
.subscribe(v => println(v))
println("test") // "test" gets printed
Mas talvez há mais de rx-idiomáticas maneiras de fazer isso existe?
Solução
Você precisa usar subscribeOn
.E. g.,
Observable[String](observer => while (true) observer onNext "hi").subscribeOn(s)
.subscribe(v => println(v))
subscribeOn
vai chamar o subscribe
função Scheduler
, enquanto observeOn
vai enviar as mensagens para o Scheduler
.