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

时间:2018-03-17 00:12:17

标签: rx-java rx-java2

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

我期待输出&#34; 6&#34;要打印,但方法在此之前完成。

如果我没有订阅IO调度程序,那么呼叫将被阻止,我确实看到输出已打印出来。

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

1 个答案:

答案 0 :(得分:1)

RxJava默认使用守护程序线程。你的主要方法在流量有机会发射任何东西之前结束。在def Winning(): if (((comp == 2) and (choice == 1)) or ((comp == 3) and (choice == 2)) or ((comp == 1) and (choice == 3))): messagebox.showinfo("Info", "YOU LOSE!!!") if (((choice == 2) and (comp == 1)) or ((choice == 3) and (comp == 2)) or ((choice == 1) and (comp == 3))): messagebox.showinfo("Info", "YOU WIN!!!") else: messagebox.showinfo("Info", "DRAW!!!") 的末尾添加一些Thread.sleep()或使用main