Только первый элемент Flowable#concatMap в RxJava2 с наблюдаемым запуском запускается на конкретном планировщике

При использовании concatMap, как показано ниже, только первая выборка будет запущена из планировщика, все остальные вызовы выборки будут инициированы потоком обратного вызова предыдущей выборки.
* fetch завершен асинхронный метод в другом потоке

Flowable<String> fetch(String item){
    return Flowable.create(emitter -> {
        new Thread(() -> {
            emitter.onNext("foo");
            emitter.onComplete();
        }).start();
    }, MISSING);
}

-

Flowable.fromIterable(list)
    .observeOn(scheduler)
    .concatMap(item -> fetch(item))
    ...

Если я изменю код, как показано ниже, все вызовы выборки будут запущены из планировщика.

Flowable.fromIterable(list)
    .observeOn(scheduler)
    .flatMap(item -> fetch(item))
    ...

Может быть, я могу сделать это как .concatMap(item -> fetch(item).subscribeOn(scheduler)), но мне любопытно, если это ожидаемое поведение, которое наблюдается только на первый вызов.

0 ответов

Другие вопросы по тегам