1

我正在尝试编写一个简单的 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死了。我注意到waitFor(o)RxScalaDemo中有一个调用,但我不知道它是从哪里导入的。

如何让这个程序永远运行,打印数字序列?

4

2 回答 2

5

这是阻止主线程退出的一种方法:

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阻塞主线程,然后当你完成你正在做的事情时倒计时锁存器,从而释放主线程

于 2015-04-03T21:47:56.970 回答
3

您没有看到任何内容,因为您的main方法在订阅Observable. 至此,您的程序就完成了。

像这样的测试程序的一个常见技巧是在订阅后从标准输入读取一个字节。

于 2015-04-03T21:45:15.337 回答