Future.wait 和并行工作
并发运行多个 Future
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 反馈 — 无需本地设置。
此课程中的所有课时
- 事件循环和微任务
- 创建并等待 Future
- 异步代码中的错误处理
- Future.wait 和并行工作