我正在学习RxJava . 我订阅了一个长时间运行的回调作为一个observable,并希望看到onNext回调执行:
fun test(){
fetchNumber(2,4).subscribeOn(Schedulers.io()).doOnSubscribe { println("subscribed") }.subscribe({ println(it)})
}
private fun fetchNumber(a: Int, b: Int) : Observable<Int> {
return Observable.fromCallable {
Thread.sleep(4000)
a + b
}
}
我希望打印输出“6”,但方法在此之前完成 .
如果我没有订阅IO调度程序,那么调用将被阻止,我确实看到输出已打印 .
我的问题是,如果在IO调度程序上运行,为什么不执行回调 . 我知道test()方法已终止,但订阅回调的引用尚未处理 .
1 回答
默认情况下,RxJava使用守护程序线程 . 你的主要方法在流量有机会发射任何东西之前结束 . 将
Thread.sleep()
添加到main
的末尾或使用blockingSubscribe
.