打破CompletableFuture的流程

时间:2015-06-29 20:37:18

标签: java java-8 future completable-future

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

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

因此,如果我的foo()返回null(将来)我需要很快打破,否则,流程会继续。

现在我必须在每个未来的街区一直检查null;但这很难看。

这可以通过CompletableFuture吗?

修改

使用CompletableFuture,您可以定义一个接一个地执行的异步任务流。例如,您可以说:

  

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

我的问题是打破这种流动并说:

  

执行A,但如果结果为null break;否则做B,然后做C ......

这就是我打破流量的意思。

1 个答案:

答案 0 :(得分:4)

您的问题很一般,所以答案可能并不完全适用于您。解决这个问题的方法有很多种,可能适用于不同的情况。

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

foo().thenCompose(x -> x == null
        ? completedFuture(null)
        : completedFuture(x)
            .then.....(...)
            .then.....(...)
).join();