CompletionStage: вернуть CompletionStage в исключительном блоке

Есть ли способ вернуть новый CompletionStage в случае возникновения исключения?

API для exceptionally, похоже, не позволяет вам это сделать. Есть ли способ обойти это?

По сути, я хотел бы сделать flatMap (thenCompose) для случая exceptionally

public CompletionStage<String> cleanupTask() {
  //DO something long running
}

public CompletionStage<String> workThatCanFail() {
  //Some long running task that may fail
}

public void action() {

CompletionStage<String> work = 
    workThatCanFail()
    .exceptionally(throwable -> cleanupTask());

}

person Setheron    schedule 25.02.2016    source источник
comment
трудно понять вашу проблему. Не могли бы вы написать вашу проблему подробнее   -  person sanky jain    schedule 25.02.2016
comment
@sankyjain добавил правку   -  person Setheron    schedule 25.02.2016
comment
JDK8 CompletableFuture такой ужасный. Отсутствуют эти полезные идиомы   -  person Setheron    schedule 25.02.2016
comment
Если workThatCanFail() оставляет вещи, которые нуждаются в очистке, в исключительном случае, этот метод должен инициировать/выполнить очистку сам, вместо того, чтобы полагаться на вызывающую сторону для цепочки действий очистки.   -  person Holger    schedule 25.02.2016