5

我有某些使用 异步运行的流程CompletableFuture,例如:

foo(...)
        .thenAccept(aaa -> {
            if (aaa == null) {
                 break!
            }
            else {
              ...
            }
        })
        .thenApply(aaa -> {
           ...
        })
        .thenApply(...

因此,如果我的foo()回报null(将来)我需要尽快中断,否则,流程将继续。

现在我必须一直检查null,在以后的每个区块中;但这很丑陋。

这可能CompletableFuture吗?

编辑

CompletableFuture您可以定义您的异步任务流,这些任务一个接一个地执行。例如,你可能会说:

做A,当A完成后,做B,然后做C...

我的问题是关于打破这个流程并说:

做A,但如果结果是空中断;否则做B,然后做C...

这就是我所说的“打破流动”的意思。

4

1 回答 1

5

您的问题非常笼统,因此答案可能并不完全适用于您。有许多不同的方法可以解决这个问题,这些方法可能适用于不同的情况。

在评估中创建分支的一种方法CompletableFuture是使用.thenCompose

foo().thenCompose(x -> x == null
        ? completedFuture(null)
        : completedFuture(x)
            .then.....(...)
            .then.....(...)
).join();
于 2015-06-29T22:02:16.890 回答