1

私は Scala プロジェクトで RxJava を使用しており、この単純なものがあると言いますObservable:

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

println("hello")

whileスレッドがブロックされているため、「hello」メッセージが表示されません。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")

...まだ「こんにちは」を出力しません。observeOnmake を追加すると、ブロック自体 OnNextではなく別のスレッドで呼び出されると思いますか?while

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

もちろん、次のようにラップwhileすることもできFutureます。

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

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

しかし、おそらく、これを行う rx 慣用的な方法が他にも存在しますか?

4

1 に答える 1

4

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

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

subscribeOnsubscribeは の関数を呼び出し、はメッセージSchedulerobserveOnにディスパッチしますScheduler

于 2014-06-05T03:18:57.883 に答える