Comment puis-je exécuter "Observables" dans un thread séparé?
-
21-12-2019 - |
Question
J'utilise RxJava dans le projet Scala et dire que j'ai cette simple Observable
:
Observable[String](observer => while (true) observer onNext "hi")
.subscribe(v => println(v))
println("hello")
Je n'obtiendrai jamais de message "hello" parce que while
les blocs d'un thread.Comment puis-je utiliser mon Observable
dans un thread séparé pour éviter le blocage?
==================================
Je pensais observeOn
pourrait aider, mais il ne le fait pas.L'exécution de cette:
val s = rx.lang.scala.schedulers.NewThreadScheduler.apply
Observable[String](observer => while (true) observer onNext "hi")
.observeOn(s).subscribe(v => println(v))
println("hello")
...ne fait toujours pas l'impression de "bonjour".Je suppose que l'ajout d' observeOn
fait OnNext
pour être appelé dans un thread séparé, mais pas un while
bloc lui-même?
==================================
Je pourrais bien sûr wrap while
dans un Future
:
Observable[String](observer => Future { while (true) observer onNext "hi" })
.subscribe(v => println(v))
println("test") // "test" gets printed
Mais peut-être il y a plus de rx-idiomatiques façons de le faire exister?
La solution
Vous avez besoin d'utiliser subscribeOn
.E. g.,
Observable[String](observer => while (true) observer onNext "hi").subscribeOn(s)
.subscribe(v => println(v))
subscribeOn
appelez le subscribe
fonction dans l' Scheduler
, tandis que observeOn
envoie les messages à l' Scheduler
.