var f1 = CompletableFuture.supplyAsync(() -> Service.findPlayers(filter, maxCount, LeaderboardType.Unranked));
var f2 = CompletableFuture.supplyAsync(() -> Service.findPlayers(filter, maxCount, LeaderboardType._1x1_RM));
var f3 = CompletableFuture.supplyAsync(() -> Service.findPlayers(filter, maxCount, LeaderboardType.TG_RM));
var x = CompletableFuture.allOf(f1, f2, f3);
谢谢!
您可以像现在一样执行CompletableFuture::Allof
,但也可以执行Join
it:
CompletableFuture.allOf(f1, f2, f3).join();
然后你做了:
Stream.of(f1, f2, f3)
.map(CompletableFuture::join)
.....
没有加入到上面的操作,虽然,因为功能已经完成。
编辑
如果不想阻止:
var f1 = ...
var f2 = ...
var f3 = ...
CompletableFuture.allOf(f1, f2, f3)
.thenAccept(x -> {
f1.join();
f2.join();
f3.join();
})
是否有一种方法可以尝试等待一段时间,然后返回不同的结果,而不取消超时后的未来? 我有一个服务(我们称之为),它跑出去做自己的事情。它返回一个结果: 我愿意[阻止并]等待它一小段时间(比方说2秒)。如果它没有完成,我希望返回一个不同的结果,但我希望服务继续做它自己的事情。然后查询服务是否完成(例如,通过websockets或其他方式)将是客户端的工作。 即。我们有以下几个案例: 花费%1 s并完成其
我要做的是异步计算树结构的深度,我将有树的第一层,我想启动一个异步线程来分别计算每个节点的深度。 在计算过程中,树中显然可能有一个分叉,在这一点上,我想踢一个额外的线程来计算那个分支。 我已经得到了这个工作,但我需要做一些整理逻辑,当所有这些未来完成。但我对这一过程中产生的额外的可完成的未来感到困扰。 我会用什么方法来保存所有开始的CompletableFutures+那些动态创建的,并且在执行任
我有一个应用程序,通过点击按钮(该数字被定义)用户创建任务(可调用)做一些计算。我希望任务完成时能够做出反应。使用Future.get()阻止应用程序。有什么方法可以在Callable返回结果时做出反应吗?
我有一个相当普遍或独特的要求。例如,我有以下列表:
问题内容: 我有一个调用一些不检查线程中断的代码。调用之后,该方法将立即抛出(如预期的那样)。但是,由于后台任务的代码从不检查其线程是否被中断,因此它很乐意继续执行。 是否有等待后台任务 实际 完成的标准方法?我希望显示“正在取消…”消息或某种类似的内容,直到任务终止为止。(我确信如果有必要,我总是可以在worker类中使用一个标志来完成此操作,只需寻找其他解决方案即可。) 问题答案: 我玩了一点
但是,testCase2不处理异常并引发错误。我是不是漏掉了什么?抱歉,我是新手。