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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top