Мне нужно отправить задачу в структуру async, над которой я работаю, но мне нужно поймать исключения и повторить одну и ту же задачу несколько раз до "прерывания".
Код, с которым я работаю, это:
int retries = 0;
public CompletableFuture<Result> executeActionAsync() {
// Execute the action async and get the future
CompletableFuture<Result> f = executeMycustomActionHere();
// If the future completes with exception:
f.exceptionally(ex -> {
retries++; // Increment the retry count
if (retries < MAX_RETRIES)
return executeActionAsync(); // <--- Submit one more time
// Abort with a null value
return null;
});
// Return the future
return f;
}
В настоящее время это не компилируется, потому что тип возврата лямбда неверен: он ожидает Result
, но executeActionAsync
возвращает a CompletableFuture<Result>
.
Как я могу реализовать эту полностью асинхронную логику повтора?