私の直感は、次のコードが間違っているということです。私は、join()が使用されているので、未来が完了していない間は例外がスローされます。次にget()が呼び出されると、チェックされた例外はなく、エラーのログもなく、失敗時のエラーの診断が難しくなります。join()とget()のCompletableFuture例外動作
List<CompletableFuture> list = ImmutableList.of(future1, future2);
CompletableFuture.allOf(list.toArray(new CompletableFuture[list.size()])).join();
try {
result1 = future1.get();
result2 = future2.get();
} catch (InterruptedException | ExecutionException e) {
// will this ever run if join() is already called?
}
私はCompletableFutureのドキュメントを見てきましたが、私の質問に対する正確な答えが見つかりませんでした。私はここで尋ねて、ソースコードを読んで行くでしょう。
キャッチブロックコードが実行されることがわかっているのは、何らかのチェック例外がいくつかの実行コンテキストに保存され、join()(またはチェックされていない例外によってラップされる)にスローされず、いくつかの形式でget()の後に。これは私にはそう思わない。
私の究極の質問は、キャッチブロックコードはこれまで実行されていますか?
なぜ単に直接使用するだけではありません: 'CompletableFuture.allOf(new CompletableFuture [] {future1、future2})。join();' – Lino
@Lino共有コードベースで作業していますが、これは私のコードではありません。 – user3527174
はもっと簡単であることが分かった: 'CompletableFuture.allOf(future1、future2).join();' – Lino