Rx java 为什么不调用此RxJava订阅方法?
我正在学习RxJava。我订阅了一个长时间运行的回调作为可观察回调,并希望看到onNext回调被执行: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> {
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