首页 文章

为什么不调用此RxJava订阅方法?

提问于
浏览
0

我正在学习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 回答

  • 1

    默认情况下,RxJava使用守护程序线程 . 你的主要方法在流量有机会发射任何东西之前结束 . 将 Thread.sleep() 添加到 main 的末尾或使用 blockingSubscribe .

相关问题