是否还有针对CompletableFuture的.thenCompose(),它也会异常执行?

 别想着摆脱_525 发布于 2022-12-04 13:32

我想执行CompletableFuture一次又一次的CompletableFuture完成,无论第一个是否异常完成(.thenCompose()仅在执行正常完成时运行).

例如:

CompletableFuture.supplyAsync(() -> 1L)
    .whenComplete((v, e) -> CompletableFuture.runAsync(() -> { 
        try {
            Thread.sleep(1000);
            System.out.println("HERE");
        } catch(InterruptedException exc) {
            return;
        }
    }))
    .whenComplete((v, e) -> System.out.println("ALL DONE"));

这打印

ALL DONE
HERE

我希望它是

HERE
ALL DONE

优选地,不将第二个嵌套在第一个whenComplete()内部.

请注意,我不关心返回的结果/异常.

1 个回答
  • 诀窍是用来.handle((r, e) -> r)抑制错误:

    CompletableFuture.runAsync(() -> { throw new RuntimeException(); })
        //Suppress error
        .handle((r, e) -> r)
        .thenCompose((r) -> 
             CompletableFuture.runAsync(() -> System.out.println("HELLO")));
    

    2022-12-11 02:57 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有