功能性Java-whenComplete与异常之间的交互

功能性Java-whenComplete与异常之间的交互,第1张

功能性Java-whenComplete与异常之间的交互

的文档

whenComplete
说:

返回一个 具有与此阶段相同的结果或异常 的新CompletionStage ,该阶段 在此阶段完成时执行给定的 *** 作

(强调我的)

这意味着该阶段不会吞噬异常,因为它应该具有相同的结果或异常。但是,您可能通过这样的事实感到惊讶的是后续阶段将获得前一阶段内的包裹外

CompletionException
,所讨论的在这里,所以它不是完全一样的例外:

CompletableFuture<String> test=new CompletableFuture<>();test.whenComplete((result, ex) -> System.out.println("stage 2: "+result+"t"+ex))    .exceptionally(ex -> { System.out.println("stage 3: "+ex); return ""; });test.completeExceptionally(new IOException());

将打印:

stage 2: null   java.io.IOExceptionstage 3: java.util.concurrent.CompletionException: java.io.IOException

请注意,您始终可以在一个阶段上附加多个 *** 作,而不是随后进行链接:

CompletableFuture<String> test=new CompletableFuture<>();test.whenComplete((result, ex) -> System.out.println("stage 2a: "+result+"t"+ex));test.exceptionally(ex -> { System.out.println("stage 2b: "+ex); return ""; });test.completeExceptionally(new IOException());stage 2b: java.io.IOExceptionstage 2a: null  java.io.IOException

当然,由于现在阶段

2a
和之间没有依赖关系
2b
,因此它们之间没有排序,并且在异步 *** 作的情况下,它们可以同时运行。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5057034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存