我正在尝试编写一个简单的RxScala程序:
import rx.lang.scala.Observable
import scala.concurrent.duration.DurationInt
import scala.language.{implicitConversions, postfixOps}
object Main {
def main(args: Array[String]): Unit = {
val o = Observable.interval(1 second)
o.subscribe(println(_))
}
}
当我运行此程序时,我看不到任何打印出来的内容。我怀疑这是因为产生Observable.interval
中的数字的线程死了。我注意到RxScalaDemo中有waitFor(o)
的来电,但我无法确定从哪里导入。
如何让这个程序继续运行以打印数字序列?
答案 0 :(得分:4)
以下是阻止主线程退出的一种方法:
val o = Observable.interval(1 second)
val latch = new CountDownLatch(1)
o.subscribe(i => {
print(i)
if (i >= 5) latch.countDown()
})
latch.await()
这是一个相当常见的模式,使用CountDownLatch.await
来阻止主线程然后在你完成你正在做的事情时countDown锁存,从而释放主线程
答案 1 :(得分:3)
由于main
方法在您订阅Observable
后立即退出,因此您没有看到任何内容。那时,你的程序就完成了。
这样的测试程序的一个常见技巧是在您订阅后从stdin读取一个字节。