[英]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.