Flux.generate与Consumer和parallel

时间:2017-10-04 10:01:16

标签: java project-reactor

我有简单的Flux

parity

在单个线程中按预期工作:

Flux<Long> flux = Flux.generate(
            AtomicLong::new,
            (state, sink) -> {
                long i = state.getAndIncrement();
                sink.next(i);
                if (i == 3) sink.complete();
                return state;
            }, (state) -> System.out.println("state: " + state));

输出

flux.subscribe(System.out::println);

但是当我切换到平行时:

0 1 2 3 state: 4

应该打印状态的Consumer:不调用Number。我只是看到了:

flux.parallel().runOn(Schedulers.elastic()).subscribe(System.out::println);

是错误还是预期功能?

1 个答案:

答案 0 :(得分:1)

我不是反应专家,但在深入研究源代码后,似乎行为是设计的;似乎创建一个ParallelFlux具有阻止国家消费者呼叫的副作用;如果你想并行并调用State Consumer,你可以使用:

flux.publishOn(Schedulers.elastic()).subscribe(System.out::println);