是否会在以下任务中捕获异常?

时间:2018-03-27 15:06:26

标签: java multithreading exception-handling executorservice

try {
    for (final Future<Boolean> bool : threadPool.invokeAll(tasks)) {
        if (!bool.get()) {
            return false;
        }
    }
    return true;
} finally {
    threadPool.shutdownNow();
    threadPool.awaitTermination(
        IMPORT_THREADS_AWAIT_TERMINATION_TIMEOUT.toMillis(), TimeUnit.MILLISECONDS);
}

假设任务可以抛出异常。假设有5个任务,第5个任务抛出异常,但循环中的第1个任务返回false。 (和循环中断)。如果该任务抛出异常,我想抓住它并做一些清理逻辑。我想知道我的逻辑永远不会捕获任务5引发的异常,因为我从任务1的循环中断开

  1. 在这种情况下,我们是否会遇到任务5抛出的异常?

  2. 显示threadPool.shutdownNow()抛出任务5的异常?

1 个答案:

答案 0 :(得分:3)

exceptiontask5抛出executor,但ExecutionException将抓住它并将其换行为futureOfTask5.get()

在这种情况下,除非您致电exception,否则try...catch将不会被重新抛出。

您可以在call task5方法中添加<Image Source="plant.png" x:Name="image"/> 块来记录它。