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