我正在学习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()方法已经终止,但是对订阅回调的引用还没有被处理掉。
答案 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
。