-1
我有兩個CompletionStage s。如果其中一個失敗,我想執行一些操作,onException
。如果兩者均失敗,我想執行onException
,但只能執行一次。如何處理兩個CompletionStages的最多一個例外
我有兩個CompletionStage s。如果其中一個失敗,我想執行一些操作,onException
。如果兩者均失敗,我想執行onException
,但只能執行一次。如何處理兩個CompletionStages的最多一個例外
我找不到CompletableStage的方法來做到這一點,所以做了它自己:
public static <A, B> void handleEitherException(CompletionStage<A> a, CompletionStage<B> b, Consumer<Throwable> onException) {
AtomicBoolean aCompletionStageHasFailed = new AtomicBoolean();
handleEitherException(a, onException, aCompletionStageHasFailed);
handleEitherException(b, onException, aCompletionStageHasFailed);
}
private static <U> void handleEitherException(CompletionStage<U> u, Consumer<Throwable> onException, AtomicBoolean aCompletionStageHasFailed) {
u.handle((a, t) -> {
if (t != null) {
if (aCompletionStageHasFailed.compareAndSet(false, true)) {
onException.accept(t);
throw new RuntimeException(t);
}
}
return null;
});
}
```