Будут ли выполняться все фьючерсы, переданные в CompletableFuture.allOf ()? - PullRequest
0 голосов
/ 23 января 2019

Итак, у меня есть пара фьючерсов, которые я хочу запустить, даже если некоторые из них потерпят неудачу, я бы хотел, чтобы у всех был шанс запустить. Так что если я сделаю:

CompletableFuture.allOf(futures).join()

Будет ли это так? Я рассуждаю так: каждое будущее будет иметь свою собственную очередь в своем исполнителе и, следовательно, все будет работать, если основной поток не завершится первым. Моя проблема в том, что я специально .join() на .allOf(), поэтому мое приложение не заканчивается, прежде чем запустить все

Итак, семантика allOf() смущает меня: завершится ли будущее возвращение, когда все пройденные фьючерсы завершатся независимо от того, успешны ли они? Или он завершит неудачное будущее, если увидит неудачу, не дожидаясь остальных?

EDIT

Чтобы проиллюстрировать мой вопрос далее, .allOf ведет себя так:

Stream.of(futures).forEach(future -> {
  try {
    future.join()
  } catch (Throwable e) {
    //dont throw, we want to join the rest
  }
})

Или это ведет себя так:

Stream.of(futures).forEach(future -> {
  try {
    future.join()
  } catch (Throwable e) {
    throw e; //All other remaining .join() wont run
  }
})

Что это? первый или второй случай? Поскольку я хочу, чтобы первый случай был тем, что я временно использую в своем коде, но я бы хотел использовать allOf(), если это возможно, потому что он более эстетичный

Спасибо!

...