RxScala:如何让执行 Observable.interval 的线程保持活动状态?
RxScala: How to keep the thread doing Observable.interval alive?
我正在尝试编写一个简单的 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)
的调用,但我不知道它是从哪里导入的。
如何让这个程序 运行ning 永远打印数字序列?
您没有看到任何内容,因为您的 main
方法在您订阅 Observable
后立即退出。到那时,你的程序就完成了。
像这样的测试程序的一个常见技巧是在您订阅后从标准输入读取一个字节。
这是阻止主线程退出的一种方法:
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
阻塞主线程,然后在完成您正在做的事情后倒计时latch,从而释放主线程
我正在尝试编写一个简单的 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)
的调用,但我不知道它是从哪里导入的。
如何让这个程序 运行ning 永远打印数字序列?
您没有看到任何内容,因为您的 main
方法在您订阅 Observable
后立即退出。到那时,你的程序就完成了。
像这样的测试程序的一个常见技巧是在您订阅后从标准输入读取一个字节。
这是阻止主线程退出的一种方法:
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
阻塞主线程,然后在完成您正在做的事情后倒计时latch,从而释放主线程