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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top