java - 如何等待List中的所有Monos完成(成功与否无关紧要)

标签 java concurrency spring-webflux project-reactor spring-reactive

我有这样的代码:

List<Mono> monoList = foo();
//await when all Monos are finished
try {
    Flux.fromIterable(monoList)
            .flatMap(Function.identity())
            .then()
            .block();

} catch (Exception e) {
    log.warn("error", e);
}

当所有 MONO 成功完成时,它可以正常工作,但如果至少有一个 Mono 完成时出现错误,则它不起作用。方法block抛出异常并中断所有其他单声道。因此,此代码会等待所有单声道成功完成或发生第一个错误时。

如何等待monoList中的所有Monos完成(不管成功与否)

最佳答案

这有效:

  try {
        Flux.fromIterable(monoList)
                .flatMap(Function.identity())
                .then()
                .onErrorContinue((throwable, o) -> {
                    //just ignore it we've already caught all errors
                })
                .block();

    } catch (Exception e) {
        log.warn("Polling finished with exceptions", e);
    }

关于java - 如何等待List中的所有Monos完成(成功与否无关紧要),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59314257/

相关文章:

swift - 你必须手动指定你的DispatchQueue是串行的吗?

java - Spock-单元测试 :How to write spock unit test for @around annotation which takes Mono

spring-boot - 为什么 Spring Webflux 只接受 256 个并行请求?

java - SQL触发时调用servlet程序

java - 在 Eclipse 中全局抑制警告类型

java - 从文本文件中读取二维数组

java - JPA @ElementCollection 注释是否始终产生一对多关系?

java - HashMap<String,Value>.remove() 通过在 Key 上使用 String.intern() 同步,这是否有效?或者这是损坏的代码?

java - 单生产者多消费者 Java

spring - 如何使用每个 Flux 元素获得的 Mono 值来过滤 Flux?