Не могу поймать исключение в CompletableFuture
У меня есть код, в нём я запускаю CompletableFuture и хочу обработать ошибку в вызывающем его коде. Но catch не срабатывает, что я делаю не так?
try {
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
throw new IllegalStateException("Error");
});
} catch (IllegalStateException e) {
System.out.println("Expected Error: " + e.getMessage());
}
P.S. я знаю про supplyAsync и exceptionally, но этот вариант мне не подходит
Ответы (1 шт):
Автор решения: kattyflanker
→ Ссылка
try-catch тут не работает, потому что CompletableFuture.runAsync запускает код в другом потоке, и исключения оттуда не попадают в твой catch.
Чтобы обработать ошибку, нужно явно дождаться завершения CompletableFuture, например через join() или get(). Только тогда можно будет поймать исключение, но уже обёрнутое в CompletionException, и его придётся аккуратно распаковать через getCause()