【发布时间】:2020-10-12 18:14:44
【问题描述】:
我正在下面运行一些异步任务,需要等到它们全部完成。我不知道为什么,但join() 没有强制等待所有任务,代码继续执行而无需等待。连接流没有按预期工作是有原因的吗?
CompletableFutures 列表只是一个映射 supplyAsync 的流
List<Integer> items = Arrays.asList(1, 2, 3);
List<CompletableFuture<Integer>> futures = items
.stream()
.map(item -> CompletableFuture.supplyAsync(() -> {
System.out.println("processing");
// do some processing here
return item;
}))
.collect(Collectors.toList());
而我等待未来之类的。
CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]))
.thenApply(ignored -> futures.stream()
.map(CompletableFuture::join)
.collect(Collectors.toList()));
我可以使用 futures.forEach(CompletableFuture::join); 等待等待,但我想知道为什么我的流方法不起作用。
【问题讨论】:
-
您是否尝试过等待
CompletableFuture.allOf().thenApply()的完整未来?您只需创建一个新的未来,而不对其进行任何操作。 -
这不是我的
CompletableFuture.allOf().thenApply()应该做的吗?它加入了每个应该阻塞的期货,直到所有期货都完成。
标签: java asynchronous java-8 completable-future