繁体   English   中英

使用消费者和并行生成通量

[英]Flux.generate with Consumer and parallel

我有简单的助焊剂

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

但是当我切换到并行时:

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

应该打印以下状态的使用者:未调用数字。 我只看到:

0 3 2 1

它是错误还是预期功能?

我不是反应灵敏的专家,但是在研究了源代码之后,似乎行为是设计使然的。 似乎创建ParallelFlux具有阻止State Consumer的呼叫的副作用; 如果要并行执行并调用State Consumer,可以使用:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM