Come posso eseguire "Observable" in un thread separato?
-
21-12-2019 - |
Domanda
Utilizzo RxJava nel progetto Scala e dico di averlo semplice Observable
:
Observable[String](observer => while (true) observer onNext "hi")
.subscribe(v => println(v))
println("hello")
Non arriverò mai al messaggio "ciao" perché while
blocca un thread.Come posso eseguire il mio Observable
in un thread separato per evitare il blocco?
==================================
stavo pensando observeOn
potrebbe aiutare ma non è così.Eseguendo questo:
val s = rx.lang.scala.schedulers.NewThreadScheduler.apply
Observable[String](observer => while (true) observer onNext "hi")
.observeOn(s).subscribe(v => println(v))
println("hello")
...ancora non stampa "ciao".Immagino di aggiungere observeOn
fa OnNext
da chiamare in un thread separato ma non a while
bloccarsi?
==================================
Ovviamente potrei avvolgere while
in un Future
:
Observable[String](observer => Future { while (true) observer onNext "hi" })
.subscribe(v => println(v))
println("test") // "test" gets printed
Ma forse esistono modi più rx-idiomatici per farlo?
Soluzione
Devi usare subscribeOn
.Per esempio.,
Observable[String](observer => while (true) observer onNext "hi").subscribeOn(s)
.subscribe(v => println(v))
subscribeOn
chiamerà il subscribe
funzione nel Scheduler
, Mentre observeOn
invierà i messaggi a Scheduler
.