/* Page prose (zh-Hans) */
"Overview" = "# Task Groups\n\n假设你正在构建一个照片叠加的天文工具。为了把一团模糊的光斑变成清晰的星系，你会多次拍摄同一片天空，然后**叠加**这些帧：把几十甚至几百张曝光合并成一张干净的图像。每一帧在加入叠加之前都必须先加载和校准，而这些工作彼此之间并不依赖，所以你会很想让它们一次性全部运行。但你事先并不知道数量：今晚是 8 帧，明天是 200 帧。在 [async/await 基础](Async%20Await%20Basics.playgroundchapter/Overview) 这一章里，你认识了 `async let`，用来并行运行*固定、已知*的少量工作。本章则是应对*动态*数量的工具：**task group**。\n\n---\n\n## 你将学到\n\n* 为什么当并行工作的数量不固定时，`async let` 会力不从心。\n* 如何用 `withTaskGroup` 扇出 `N` 个并发的子任务并收集它们的结果。\n* 为什么结果会按**完成顺序**到达，以及如何把它们重新排好序。\n* `withThrowingTaskGroup` 如何处理错误：它会取消其余的子任务并重新抛出。\n* **结构化保证**（这个 group 绝不会泄漏任务）以及取消如何向下传递给子任务。\n* 一种**限制**同时运行多少个子任务的模式，以及你为什么会想这么做。\n\n准备好了就翻页，我们会看到 `async let` 究竟在哪里力不从心。\n\n第 1 / 9 页  |  [下一页: async let 在哪里不够用](@next)";
