当前位置: 首页 > 知识库问答 >
问题:

等待列表以指示所有操作已完成的正确方法

巫朝明
2023-03-14

我正在使用runAsync()运行几百个函数。所有函数都修改一些静态可用的列表,因此不需要返回任何内容。我想在继续我的处理之前确保它们都完成。这样等待合适吗?有没有更简单的方法来完成我想做的事情?

List<CompletableFuture<Void>> futures = new ArrayList<>();
active_sites.forEach(site -> site.getEntryPoints().stream().map(EntryPoint::scanEntryPoint).forEach(futures::add));
CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).join();

共有1个答案

东门晓博
2023-03-14

你可以把它简化一点:

CompletableFuture[] scans = active_sites.stream()
    .flatMap(site -> site.getEntryPoints().stream())
    .map(EntryPoint::scanEntryPoint)
    .toArray(CompletableFuture[]::new)
CompletableFuture.allOf(scans).join();
 类似资料:
  • 他说,我有一个问题,我需要发送多个AJAX调用到同一个URL,但数据不同。我需要将其分块发送,并等待所有请求完成,然后再执行每个函数。 我做了一个简单的区块函数,将我的数组切片并将其分为多个组。 我的代码: 我需要在最后得到一个完整的数组来保存我所有的resp数据 我不能做$。当(),因为我不能命名函数,我也不知道如何使用$。deverred()在这个函数中你能帮我吗? 谢谢

  • 我想在C#中处理子目录和文件的文件系统/文件夹。我正在使用TPL库中的任务。这个想法是递归地执行它并为每个文件夹创建一个任务。主线程应该等待子线程完成,然后打印一些信息。事实上我只是想知道扫描何时完成。我已经开始使用线程池,然后切换到TLP。做了一些简单的例子。经过一些尝试从简单的代码到越来越臃肿的代码我被困在这里: 主线程有时仍然过早地继续,而不是在完成所有其他线程之后继续。(我对C#比较陌生,

  • 英文原文:http://emberjs.com/guides/getting-started/show-when-all-todos-are-complete/ 接下来我们将修改模板来提示所有待办事项都已经完成。在index.html中替换静态的复选框<input>为{{input}}: 1 2 3 4 5 6 {{! ... 为保持代码简洁,在此省略了其他代码 ... }} <section

  • 我和Nodejs一起工作。我有一个异步,因为我必须等待内部的结果。因此,我需要等待foreach完成,然后继续循环的结果。我找到了几个等待的解决方案,其中一个是使用promise。虽然我这样做了,这些promise是创建的,但是,代码后的每个(因此promise)完成,从来没有实际执行(console.log没有打印)。NodeJS函数结束时没有任何错误。 这是我的密码: “here”只打印一次(

  • 问题内容: 我需要等到我所有的ajax函数都完成后,再继续执行。 我的特殊情况是,在提交表单之前,我需要翻译表单中的某些字段。我通过ajax调用将其转换为外部站点。根据表单中的某些值,我需要进行更多或更少的翻译。完成所有翻译后(如果有),我必须使用ajax验证表单,如果表单有效,则提交。 这是我的方法: 首先,我有一个函数发送ajax调用并对接收到的数据进行处理: 然后,当要提交表单时,我将执行以

  • 问题内容: 我目前正在等待所有承诺按顺序完成,如下所示: 但是,通过这种方式,配置文件和令牌将顺序执行。由于两者彼此独立,因此我希望两者一起独立执行。我认为可以使用Promise.all完成此操作,但是我不确定语法,也找不到任何帮助。 所以我的问题是如何转换上面的api调用以一起运行,然后返回最终输出。 问题答案: