【问题标题】:How to stop execution a Flux after a certain time in Java?如何在 Java 中一段时间​​后停止执行 Flux?
【发布时间】:2020-07-02 19:37:10
【问题描述】:

如何在 Flux 中停止发布(流式传输)在计时器之后 e.g. 1s,如果还有数字,就不公布了。 例如在 1000 个数字之后,它们将不会被打印出来。

@Test
public void test() {    
        
        Flux.range(0, 20000)
            // hier 
            .delayElements(Duration.ofMillis(1))
            .parallel(2)
            .runOn(Schedulers.parallel())
            .doOnNext(i -> {
                System.out.println(i);

            })
            .sequential()
            .blockLast();

}

【问题讨论】:

    标签: java spring-webflux project-reactor


    【解决方案1】:

    您可以使用Flux.take(Duration) 使 Flux 在一定时间后完成。

    对于您发布的代码和 1 秒的阈值,如下所示:

    Flux.range(0, 20000)
        // hier 
        .delayElements(Duration.ofMillis(1))
        .parallel(2)
        .runOn(Schedulers.parallel())
        .doOnNext(i -> {
            System.out.println(i);
        })
        .sequential()
        .take(Duration.ofSeconds(1)) // <--
        .blockLast();
    

    【讨论】:

      最近更新 更多