Dart Academy · 课时

Future.wait 和并行工作

并发运行多个 Future

第 4 / 4 课13 个步骤

Future.wait 和并行工作 是 CoddyKit 上的免费 Dart Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Dart Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Dart Academy 课程共包含 4 节课。

逐个等待很慢

按顺序等待 Future 时,每个 Future 都必须等待上一个完成。三个各需一秒的调用,总共就要三秒。

同时启动它们

先启动彼此独立的异步调用,再等待它们。它们会并发运行,因此总耗时取决于最慢的调用,而不是各调用耗时之和。

认识 Future.wait

Future.wait接收一个 Future 列表,并返回一个在所有 Future 完成后才完成的 Future。

final results = await Future.wait([a(), b(), c()]);

结果保持顺序

Future.wait 会按照输入 Future 的顺序提供结果列表,无论哪个 Future 先完成。

final list = await Future.wait([one(), two()]);
print(list[0]); // result of one()

真正节省时间

三个并行运行、各需一秒的 Future 大约会在一秒内一起完成,因为Future.wait让等待过程重叠进行。

如果其中一个失败

默认情况下,只要任意一个 Future 出错,Future.wait就会立即以该错误完成,即使其他 Future 仍在运行。

使用 eagerError 继续等待

传入eagerError: false后,Future.wait 仍会等待每个 Future 完成,然后才报告它遇到的第一个错误。

await Future.wait(tasks, eagerError: false);

使用 Future.any 竞速

只需要最快的结果吗?Future.any会在列表中的第一个 Future 成功时立即完成。

final fastest = await Future.any([mirrorA(), mirrorB()]);

构建列表

一种常见模式是对输入使用map来创建 Future 列表,然后直接将其传给 Future.wait。

await Future.wait(ids.map(fetchUser));

并发,而非并行线程

这是在一个 isolate 上进行的并发:事件循环会交错处理等待过程。对于占用大量 CPU 的工作,您应当使用 isolate。

分别在何时使用

需要所有结果时使用Future.wait,只需要最先到达的结果时使用 Future.any。⚖️

快速检查

快速检查如何同时运行多个 Future。

回顾:并发 Future

您已经学会使用Future.wait重叠异步工作以获取所有结果,使用 Future.any 获取最快结果,以及错误的处理方式。🏁

免费开始

用 AI 导师学习 Dart — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「Future.wait 和并行工作」课时是免费的吗?

是的 — 「Future.wait 和并行工作」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Dart Academy 课程的其余内容,请升级到 CoddyKit PRO。 Dart Academy 课程共包含 4 节课。

「Future.wait 和并行工作」这节课中我会学到什么?

并发运行多个 Future 你通过在浏览器中直接运行的动手代码来练习 Dart Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Dart Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Dart Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「Future.wait 和并行工作」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Dart Academy 课中编写并运行代码吗?

能。每节 Dart Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 事件循环和微任务
  2. 创建并等待 Future
  3. 异步代码中的错误处理
  4. Future.wait 和并行工作
← 返回 Dart Academy