Java8 CompletableFuture recoveryWith equivalente? por ejemplo, excepcionalmente, pero devuelve CompletableFuture <U>

No veo una forma obvia de manejar una excepción con un resultado asincrónico. Por ejemplo, si quiero volver a intentar una operación asincrónica. Esperaría algo como esto, sin embargo, handleAsync no hace lo que crees que hace: ejecuta las devoluciones de llamada en otro hilo de forma asincrónica. Devolver un CompletionStage aquí no es correcto. Pregunta de peligro del día:thenApply Es parathenCompose comoexceptionally es a que?

CompletionStage<String> cf = askPong("cause error").handleAsync((x, t) -> {
    if (t != null) {
        return askPong("Ping");
    } else {
        return x;
    }
});

Donde askPong le pregunta a un actor:

public CompletionStage<String> askPong(String message){
    Future sFuture = ask(actorRef, message, 1000);
    final CompletionStage<String> cs = toJava(sFuture);
    return cs;
} 

Respuestas a la pregunta(2)

Su respuesta a la pregunta