Не могу поймать исключение в 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()

→ Ссылка