假设我有 CompletableFutures A、B 和 C 是可运行的。 B 依赖于 A,C 依赖于 A 和 B,我可以先做 A,然后组合 B 和 B,然后组合 A,这样 C 就可以从 A 和 B 获取值,即使 B 也依赖于 A 的值?
基本上我要问的是 - 有没有办法获得像这样的 CompletableFuture 管道:
A -- B -- C
-------^
CompletableFuture<String> A = CompletableFuture.supplyAsync(() -> return "Hello");
CompletableFuture<String> B = A.thenApplyAsync(stringA -> return stringA + "World");
B.thenCombine(A, (stringA, StringB) -> doStuffWithAAndB(stringA, stringB));
希望这是有道理的。
最佳答案
这样做完全没问题。对于如何将 CompletableFuture
组合在一起没有任何限制。
您有责任确保它们最终完成,但这不是这里的问题。
或者,您可以直接从回调访问 A,如下所示:
CompletableFuture<String> a = CompletableFuture.supplyAsync(() -> return "Hello");
CompletableFuture<String> b = a.thenApplyAsync(stringA -> return stringA + "World");
b.thenApply(stringB -> doStuffWithAAndB(a.join(), stringB));
但这确实是一个偏好问题。
关于java - 我可以在 CompletableFuture 上多次使用 thenCombine/thenCompose 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48724206/