gpt4 book ai didi

java - 如何使用在 thenCombineAsync 中返回 CompletionStage 的方法

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:32 25 4
gpt4 key购买 nike

我有 3 个返回 CompletionStage 的函数.假设它们看起来像:

CompletionStage<A> funcA();
CompletionStage<B> funcB();
CompletionStage<C> funcC(A a, B b);

现在我想写函数funcD返回 CompletionStage<C> .结果由 funcC 计算得出和 params 来自 funcAfuncB .现在的问题是如何正确地做到这一点?

我在阅读文档后的尝试看起来像这样,但我不确定它是否正确使用。问题是在 thenCombineAsync 之后我收到 CompletionStage<CompletionStage<C>>最后一行看起来像丑陋的解决方法来提取正确的结果。可以做得更好吗?

CompletionStage<C> funcD() {
CompletionStage<B> completionStageB = funcB();
return funcA()
.thenCombineAsync(completionStageB, (a,b) -> funcC(a,b))
.thenComposeAsync(result -> result);
}

假设方法的声明不能更改。

最佳答案

没有thenComposeWithBoth。如果您不能修改方法签名,我会保持原样(但删除 Async -- 见下文)。缩短这段时间的唯一方法是在 Combine 阶段使用 join():

funcA()
.thenCombineAsync(completionStageB, (a,b) -> funcC(a,b).join());

另外,您正在不必要地使用 ...Async 方法。由于您的 funcC 返回一个 CompletableFuture,它可能不会长时间运行并且不需要异步安排它。而result -> result当然不需要在单独的线程中运行。

关于java - 如何使用在 thenCombineAsync 中返回 CompletionStage 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42908740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com