gpt4 book ai didi

java - 嵌套异步任务(在java中使用CompletionStage)

转载 作者:行者123 更新时间:2023-11-30 03:24:07 28 4
gpt4 key购买 nike

我使用的服务(来自库,我无法更改它)有 3 种方法:

CompletionStage<AData> getAData(int id);
CompletionStage<BData> getBData(int id);
CompletionStage<Path> computePath(int id);

出于我的目的,我应该获取 AData 和 BData,然后根据这些值尝试计算一些 Path ,如果我做不到 - 使用服务调用

所以我的代码现在看起来像:

 CompletionStage<Path> getPath(int id) {
service.getAData(id).thenCombine(service.getBdata(id)), (a, b) ->
{
Path result = computePathLocaly(a, b);
return result != null ?
result :
service.computePath(id).toCompletableFuture().join();
}
}

一切正常,但是toCompletableFuture().join()看起来很糟糕。包裹resultCompletionStage并返回CompletionStage<CompletionStage<Path>> - 更糟糕...

我相信可以做得更优雅,但我不知道如何......请帮忙。

最佳答案

您可以将 service.computePath(id) 调用与 computePathLocally 调用组合起来

CompletionStage<Path> getPath(int id) {
service.getAData(id).thenCombine(service.getBdata(id)), (a, b) ->
return computePathLocally(a, b);
).thenCompose((result) ->
return result != null ?
CompletableFuture.completedFuture(result) :
service.computePath(id);
)
}

关于java - 嵌套异步任务(在java中使用CompletionStage),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30693434/

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