Rx java RxJava2:使用热源扫描-始终落后一个值?

Rx java RxJava2:使用热源扫描-始终落后一个值?,rx-java,rx-java2,Rx Java,Rx Java2,我很难理解扫描与热源组合的行为-我第一次在生产环境中体验到这一点,但谢天谢地,我能够在玩具示例中重现这种效果 我们开始: PublishRelay<Integer> source = PublishRelay.create(); Flowable<Integer> sink = source.toFlowable(BackpressureStrategy.LATEST) .scan(1, new BiFunction<Int

我很难理解
扫描
与热源组合的行为-我第一次在生产环境中体验到这一点,但谢天谢地,我能够在玩具示例中重现这种效果

我们开始:

    PublishRelay<Integer> source = PublishRelay.create();

    Flowable<Integer> sink = source.toFlowable(BackpressureStrategy.LATEST)
            .scan(1, new BiFunction<Integer, Integer, Integer>() {
                @Override
                public Integer apply(Integer integer, Integer integer2) throws Exception {
                    int result = integer + integer2;
                    System.out.println(String.format("%d + %d = %d", integer, integer2, result));
                    return result;
                }
            })
            .share();

    Thread.sleep(2_000);
    System.out.println(String.format("sending: %d", 2));
    source.accept(2);

    System.out.println(String.format("subscribing now"));
    sink.subscribe(
            new Consumer<Integer>() {
                @Override
                public void accept(Integer integer) throws Exception {
                    System.out.println(String.format("onNext: %d", integer));
                }
            }
    );
    System.out.println(String.format("subscribing done"));

    Thread.sleep(2_000);
    System.out.println(String.format("sending: %d", 3));
    source.accept(3);

    Thread.sleep(2_000);
    System.out.println(String.format("sending: %d", 4));
    source.accept(4);

    Thread.sleep(2_000);
    System.out.println(String.format("done"));
现在,我的问题是:为什么它总是落后一个值?为什么不是:

sending: 2
subscribing now
subscribing done
sending: 3
1 + 3 = 4
onNext: *4*
sending: 4
4 + 4 = 8
onNext: *8*
done

那么,我能做些什么呢?我是否需要确保源代码只在
扫描本身至少有一个订户之后才会发出新项目?

首先,升级到RxJava 2.1.1或更高版本,然后再次检查。哦,该死-我以为我已经在2.1.1上了,但那是在我没有用于测试的库中。而主项目仍处于2.0.5。。。对不起,非常感谢!
sending: 2
subscribing now
subscribing done
sending: 3
1 + 3 = 4
onNext: *4*
sending: 4
4 + 4 = 8
onNext: *8*
done