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

Rx java 为什么不调用此RxJava订阅方法?,rx-java,rx-java2,Rx Java,Rx Java2,我正在学习RxJava。我订阅了一个长时间运行的回调作为可观察回调,并希望看到onNext回调被执行: fun test(){ fetchNumber(2,4).subscribeOn(Schedulers.io()).doOnSubscribe { println("subscribed") }.subscribe({ println(it)}) } private fun fetchNumber(a: Int, b: Int) : Observable<Int> {

我正在学习RxJava。我订阅了一个长时间运行的回调作为可观察回调,并希望看到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
    }
}
fun测试(){
fetchNumber(2,4).subscribeOn(Schedulers.io()).doOnSubscribe{println(“subscribed”)}.subscribe({println(it)})
}
私有数字(a:Int,b:Int):可观察{
返回Observable.fromCallable{
线程睡眠(4000)
a+b
}
}
我本来希望输出“6”被打印出来,但该方法在此之前就完成了

如果我没有在IO调度程序上订阅,那么调用将被阻止,并且我确实看到输出被打印出来


我的问题是,如果在IO调度程序上运行,为什么不执行回调。我知道test()方法已终止,但对订阅回调的引用尚未处理。

RxJava默认使用守护进程线程。您的主要方法在流有机会发出任何东西之前结束。在
main
的末尾添加一些
Thread.sleep()
,或者使用
blockingSubscribe