首页 > 解决方案 > 将多个 CompletableFuture 与返回结果合二为一

问题描述

我有“N”个任务,应该从“M”个服务器并行异步完成。我将任务块发送到作为结果()返回的每个服务器方法,CompletableFutures<Result>然后我必须从中获取结果。这很好用,但我需要将这些“块”组合成一个CompletableFuture<Result>包含所有结果的块。

现在,我返回到 caller Collection<CompletableFutures<Result>>,其中每个块都是来自不同服务器的响应,但这应该更改为 single CompletableFuture<Result>

有什么建议可以实现吗?我不想链接任务,因为我需要并行执行。CompletableFuture.allOf() 也不是解决方案,因为它是 VOID 并且无法获得结果。

我目前的方法是这样的:

private Collection<CompletableFutures<Result>> parallelExecute() {
    Collection<CompletableFutures<Result>> result = new ArrayList<>();
    for (int i = 0; i < servers.length; i++) {
        CompletableFutures<Result> partResult = server.execute();   
        result.add(partResult );
    }
    return result; 
}

标签: javacompletable-future

解决方案


推荐阅读