/* Page prose (zh-Hans) */
"StructuredGuarantee" = "# 结构化保证\n\ntask group 是**结构化并发**，而“结构化”这个词承载着一个值得大声说出来的承诺：\n\n**在每一个子任务都完成或被取消之前，`withTaskGroup` 作用域不会返回。** 没有哪个子任务能比 group 活得更久。当控制流越过那个右花括号时，不会有任何残留的任务在暗处运行。\n\n这就是为什么你从来不需要手动追踪子任务、自己去取消它们，也不用担心有一个溜掉了、在你早已继续往下走之后还在烧 CPU。你代码的*结构*，也就是 group 的花括号，界定了这份工作的*生命周期*。即使是上一页那个抛出错误的例子，group 也是直到被取消的兄弟任务真正停下来之后才返回。\n\n取消的传播方式和 [任务与取消](Tasks%20and%20Cancellation.playgroundchapter/Overview) 这一章里一样：**沿着树向下**。取消拥有这个 group 的任务，那么每个子任务也会被标记为已取消。而一个子任务只是一个普通的任务，所以它观察取消的方式也一样：`Task.sleep` 会抛出 `CancellationError`，你也可以在一个长循环里检查 `Task.isCancelled` 来提前退出。";
"StructuredGuarantee-2" = "**观察运行：** 取消 `stack` 会传播进 group，并向下传到全部 100 个子任务。它们的 `Task.sleep` 调用会抛出错误并回退（这里的 `try?` 吞掉了错误并产生 `nil`，所以那些帧贡献的是它们的回退值），而 group 仍然干净地返回，因为即使答案是“停下”，这个保证也依然成立。什么都不会泄漏。\n\n[上一页](@previous)  |  第 7 / 9 页  |  [下一页: 限制同时运行的数量](@next)";
