質問

私は Scala プロジェクトで RxJava を使用しており、これは簡単だと言います Observable:

Observable[String](observer => while (true) observer onNext "hi")
  .subscribe(v => println(v))

println("hello")

「こんにちは」メッセージは決して届きません。 while スレッドをブロックします。どうすれば実行できますか Observable ブロックを避けるために別のスレッドで?

==================================

私が考えていた observeOn 役立つかもしれないが、役に立たない。これを実行すると:

val s = rx.lang.scala.schedulers.NewThreadScheduler.apply

Observable[String](observer => while (true) observer onNext "hi")
  .observeOn(s).subscribe(v => println(v))

println("hello")

...まだ「hello」が出力されません。追加すると思います observeOn 作る OnNext 別のスレッドで呼び出されますが、 while 自分自身をブロックしますか?

==================================

もちろんラッピングもできますよ whileFuture:

Observable[String](observer => Future { while (true) observer onNext "hi" })
  .subscribe(v => println(v))

println("test") // "test" gets printed

しかし、おそらくこれを行うための rx 慣用的な方法がもっと存在するのではないでしょうか?

役に立ちましたか?

解決

使用する必要があります subscribeOn. 。例えば。、

Observable[String](observer => while (true) observer onNext "hi").subscribeOn(s)
  .subscribe(v => println(v))

subscribeOn に電話します subscribe の機能 Scheduler, 、 その間 observeOn にメッセージをディスパッチします Scheduler.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top