【问题标题】:Why is this RxJava subscription method not invoked?为什么没有调用这个 RxJava 订阅方法?
【发布时间】:2018-03-17 00:12:16
【问题描述】:

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

我期待输出“6”被打印出来,但该方法在此之前完成。

如果我没有订阅 IO 调度程序,那么调用会被阻止,我确实会看到打印的输出。

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

【问题讨论】:

    标签: rx-java rx-java2


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多