繁体   English   中英

如何找到CompletableFuture在特定情况下完成

[英]How to find CompletableFuture completed execeptionally

我正在使用CompletableFuture,并对异常处理有疑问。

我有这样的代码,如果任何validate()或process()方法抛出异常,那么它由ExceptionHandler处理。 但是,当我像这样使用CompletableFuture时,抛出的异常包含在CompletionException中。 我可以知道如何确保在那里调用我的ExceptionHandler而不是获得CompletionException?

CompletableFuture<Response> response = CompletableFuture
                .supplyAsync(() -> {
                    validationService.validate(request);
                    return myService.process(request, headers);
                });

CompletableFuture上调用get()之前调用此方法isCompletedExceptionally ,如果它以异常完成,则返回true

public boolean isCompletedExceptionally()

如果此CompletableFuture以任何方式异常完成,则返回true。 可能的原因包括取消,显式调用completeExceptionly,以及突然终止CompletionStage操作。

您还可以为completableFuture添加异常块,因此在执行任务时如果发生任何异常,它将执行异常,但输入参数异常

CompletableFuture<String> future = CompletableFuture.supplyAsync(()-> "Success")
                                   .exceptionally(ex->"failed");

在上面的示例中,如果发生任何异常,则执行supplyAsync 失败将返回,否则返回Success

知道了,通过调用以下代码,它将解决我的问题

try {
            response.join();
        }
        catch(CompletionException ex) {
            try {
                throw ex.getCause();
            }

            catch(Throwable impossible) {
                throw impossible;
            }
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM