我在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")
...仍然不打印"你好"。我想添加observeOn
会使OnNext
在一个单独的线程中调用,而不是while
块本身?
==================================
我当然可以将while
包裹在Future
:
Observable[String](observer => Future { while (true) observer onNext "hi" })
.subscribe(v => println(v))
println("test") // "test" gets printed
但也许有更多rx-idiomatic方法可以做到这一点?
答案 0 :(得分:3)
您需要使用subscribeOn
。如,
Observable[String](observer => while (true) observer onNext "hi").subscribeOn(s)
.subscribe(v => println(v))
subscribeOn
会调用subscribe
中的Scheduler
函数,而observeOn
会将邮件发送到Scheduler
。