doTask()是在previousStepResult成功的情况下执行某些操作的方法,否则将记录日志并按原样返回previousStepResult。下面的代码可以正常工作,并且仅当没有异常(错误)时才执行conclude()。但是,如果存在异常(处理得当),代码将返回false。因此,如果发生错误,则将下一步称为精细,并记录并返回false。但是,根本没有调用conclude。我不确定每个步骤中是否有异常影响阻止thenAcceptAsync的执行或执行什么操作。有什么线索吗?

return CompletableFuture.supplyAsync(() -> doTask("task1", true), taskExecutor).
                thenApplyAsync(previousStepResult -> doTask("task2", previousStepResult),taskExecutor).
                thenApplyAsync(previousStepResult -> doTask("task3", previousStepResult),taskExecutor).
                thenAcceptAsync(previousStepResult -> conclude(previousStepResult),taskExecutor);

最佳答案

在可能引发错误的步骤之后使用CompletableFuture::handleCompletableFuture::handleAsync。这将导致进一步的步骤被调用,否则将被跳过。

10-05 20:14