簡體   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