RxJava1 concatMap导致MissingBackpressureException

时间:2018-05-10 16:22:12

标签: android kotlin rx-java

我正在尝试使用concatMap转换Observable,因为顺序对我的情况很重要。

@Test
fun load_data() {
    val sub = TestSubscriber<Long>()

    var s = BehaviorSubject.create<Long>()

    s.concatMap {
        Observable.timer(it, TimeUnit.MILLISECONDS)
    }
    .take(4)
    .subscribe(sub)

    s.onNext(5)
    s.onNext(6)
    s.onNext(7)
    s.onNext(8) //rx.exceptions.MissingBackpressureException

    sub.awaitTerminalEvent(500, TimeUnit.MILLISECONDS)
    sub.assertNoErrors()
}

我已将实际数据加载更改为Observable.timer(),以简化示例并使其更容易重现。

我在应用BehaviorSubject中使用以将操作与rx链接

documentation开始,尤其是从大理石图中,我希望它会将项目存储在队列中并逐个转换。

但似乎concatMap队列的大小只设置为2个项目。添加更多项目会导致MissingBackpressureException

所以我有以下问题:

  1. 为什么concatMap的队列大小为2而不是RxRingBuffer.SIZE 其他运营商有?
  2. 我以前应该添加任何onBackpressure*运算符 致电concatMap以阻止MissingBackpressureException 异常?

0 个答案:

没有答案