【发布时间】:2017-10-31 21:44:55
【问题描述】:
我有一系列使用 Java CompletableFutures 链接在一起的异步任务。代码如下所示:
CompletableFuture<Result> doTasks(final TaskId id) {
return firstTask.workAsync(id)
.thenComposeAsync(__ -> secondTask.workAsync(id))
.thenComposeAsync(__ -> thirdTask.workAsync(id))
.thenApplyAsync(__ -> fourthTask.workAsync(id));
}
但是,firstTask.workAsync 会抛出一个异常,表示工作已经完成,在这种情况下是可以的,所以我想直接忽略它并继续遍历链。
当然,我可以将那个位包装在一个单独的函数中,在那里我可以处理异常,但是有没有办法直接在CompletableFuture 链中处理它并继续抛出所有其他异常?
一位同事建议我使用CompletableFuture.exceptionally,但是我在网上看到的所有示例都完全没用,只是返回null,这看起来会杀死链条。在这种情况下我将如何使用它?
【问题讨论】:
标签: java asynchronous concurrency completable-future