「Observable」を別のスレッドで実行するにはどうすればよいですか?
-
21-12-2019 - |
質問
私は 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
自分自身をブロックしますか?
==================================
もちろんラッピングもできますよ while
で Future
:
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
.
所属していません StackOverflow