CompletableFuture 异常处理-CSDN社区

可以通过 handle() 方法来处理任务执行过程中可能出现的抛出异常的情况。

public <U> CompletableFuture<U> handle(    BiFunction<? super T, Throwable, ? extends U> fn) {    return uniHandleStage(null, fn);} public <U> CompletableFuture<U> handleAsync(    BiFunction<? super T, Throwable, ? extends U> fn) {    return uniHandleStage(defaultExecutor(), fn);} public <U> CompletableFuture<U> handleAsync(    BiFunction<? super T, Throwable, ? extends U> fn, Executor executor) {    return uniHandleStage(screenExecutor(executor), fn);}

示例代码如下:

CompletableFuture<String> future        = CompletableFuture.supplyAsync(() -> {    if (true) {        throw new RuntimeException("Computation error!");    }    return "hello!";}).handle((res, ex) -> {    // res 代表返回的结果    // ex 的类型为 Throwable ,代表抛出的异常    return res != null ? res : "world!";});assertEquals("world!", future.get());

还可以通过 exceptionally() 方法来处理异常情况。

CompletableFuture<String> future        = CompletableFuture.supplyAsync(() -> {    if (true) {        throw new RuntimeException("Computation error!");    }    return "hello!";}).exceptionally(ex -> {    System.out.println(ex.toString());// CompletionException    return "world!";});assertEquals("world!", future.get());

如果你想让 CompletableFuture 的结果就是异常的话,可以使用 completeExceptionally() 方法为其赋值。

CompletableFuture<String> completableFuture = new CompletableFuture<>();// ...completableFuture.completeExceptionally(  new RuntimeException("Calculation failed!"));// ...completableFuture.get(); // ExecutionException

原网址: 访问
创建于: 2023-04-06 17:27:59
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论