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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top