RxJava,为什么 1 和 2 在这个序列中不按顺序到达?

RxJava, why 1 and 2 don't arrive in order in this sequence?

Observable.just(1, 2, 3, 4, 5)
    .flatMap(
        a -> {
          if (a < 3) {
            return Observable.just(a).delay(3, TimeUnit.SECONDS);
          } else {
            return Observable.just(a);
          }
        })
    .doOnNext(
        a -> System.out.println("Element: " + a )
    .subscribe();

如果1和2等了3秒,为什么有时候2先到后1?不应该永远是 1 吗?

有时:

Element: 3
Element: 4
Element: 5
Element: 2
Element: 1

Element: 3
Element: 4
Element: 5
Element: 1
Element: 2

不应该一直这样出去吗(3,4,5,1,2)?

默认情况下 delay 运算符使用计算调度程序:

    @CheckReturnValue
    @SchedulerSupport(SchedulerSupport.COMPUTATION)
    public final Observable<T> delay(long delay, TimeUnit unit) {
        return delay(delay, unit, Schedulers.computation(), false);
    }

这意味着每个延迟操作都在从计算池中取出的线程中执行。

flatMap 不等待最后一项被完全处理,所以对于 12 它们在不同的线程(从计算池中获取)并行处理。 不同线程意味着无法保证顺序

默认情况下,所有基于时间的运算符都使用计算调度程序。你可以看看我的另一个回答