【发布时间】:2023-03-19 03:01:01
【问题描述】:
我正在尝试使用 Californium-SR10 中的 Project Reactor 创建一个 lazy-Stream。
根据the javadoc:
在 Iterator.next() 调用上将此 Flux 转换为惰性 Iterable 阻塞。
因此,我尝试了以下方法:
AtomicInteger generatedElements = new AtomicInteger(0);
Flux<Integer> source = Flux
.range(0, 10)
.doOnRequest(req -> System.out.println("Requested " + req))
.doOnRequest(req -> generatedElements.addAndGet((int) req))
.limitRate(2)
.subscribeOn(Schedulers.elastic());
Iterator<Integer> l = source.toIterable().iterator();
assertThat(l.next()).isEqualTo(0);
assertThat(l.next()).isEqualTo(1);
assertThat(l.next()).isEqualTo(2);
Thread.sleep(2000);
assertThat(generatedElements.get()).isEqualTo(4);
这给了我以下令人惊讶的结果:
Requested 2
Requested 2
Requested 2
Requested 2
Requested 2
Requested 2
org.junit.ComparisonFailure: expected:<[4]> but was:<[12]>
Expected :4
Actual :12
您对这里发生的事情(以及如何解决)有任何解释吗?
【问题讨论】:
标签: java-8 reactive-programming project-reactor