Я только что написал некоторый пример кода с помощью takeUntil
-
final Observable<Integer> stopper = Observable.just(1)
.doOnComplete(() -> view.append("second stream complete"))
.delay(500, TimeUnit.MILLISECONDS);
return Observable
.range(0, 10)
.zipWith(Observable.interval(100, TimeUnit.MILLISECONDS), (item, interval) -> item)
.takeUntil(stopper)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(view::append);
Так что в идеале пробка испускается через 500 мс и завершает второе наблюдаемое, что и происходит.НО doOnComplete
печатает сразу.
Как я понимаю из документации - delay
сдвигает события вперед во времени - включая полное событие.Так почему же это случилось?