Это поведение указано в документации по классу CompletionStage
(четвертая пуля) :
Метод
blockquote>handle
дополнительно разрешает этап для вычисления результата замены, который может обеспечить дальнейшую обработку другими зависимыми этапами. Во всех остальных случаях, если вычисление этапа внезапно прекращается с (неконтролируемым) исключением или ошибкой, то все зависимые этапы, требующие его завершения, также выполняются исключительно с помощьюCompletionException
, содержащего исключение в качестве причины .Не удивительно, если вы считаете, что вы можете хотеть знать, была ли эта сцена, вы вызвали
exceptionally
, неудачно или один из ее прямых или косвенные предпосылки.