/* Page prose (zh-Hans) */
"StructuredVsUnstructured" = "# 结构化 vs 非结构化\n\nSwift 并发有两大类任务，而把它们区分开来，是这一章里最有用的一个思维模型。\n\n**结构化任务**是一个子任务，它的生命周期*绑定到你代码中的某个作用域*。它在一个父任务内部创建，而父任务在每个子任务都完成（或被取消）之前无法返回。你从 **`async let`**（下面就会遇到）和**任务组**（后面的章节）得到结构化任务。编译器强制这种嵌套，所以子任务不能比它们的父任务活得更久：没有泄漏，没有被遗忘的工作。\n\n**非结构化任务**是你用 `Task { }` 或 `Task.detached { }` 手动创建的。它*没有*绑定到周围的作用域。即使创建它的函数已经返回，它仍在继续运行，而**你**要为它负责：持有它的句柄、等待它的值、在合适的时候取消它。\n\n这是结构化的形式。`async let` 立即启动一个子任务，并把它最终的结果绑定到一个名字上；你稍后对那个名字使用 `await`。";
"StructuredVsUnstructured-2" = "**观察运行：**茶和牛奶*同时*冲泡，而不是一个接一个。整件事大约花 0.5 秒（两者中较长的那个），而不是 0.8 秒。两个子任务都保证在 `Task` 块结束之前完成；这就是“绑定到作用域”的保证。即使你从不写那个 `await`，Swift 仍会在作用域末尾隐式地等待它们；一个结构化的子任务永远不会被抛弃。\n\n* callout(试一试): 把 `steepTea` 的延迟提高到 `.milliseconds(900)`。托盘还是在大约两个时间中*较长*的那个之后送到，还是在两者之和之后？\n\n把这一点和你一直在用的非结构化 `Task { }` 对比一下：它自由漂浮。有时这种自由正是重点所在（比如，从一次 SwiftUI 按钮点击中启动工作），但它意味着安全网没了。除非你去等它，否则没人等它。\n\n[上一页](@previous)  |  第 4 / 11 页  |  [下一页: Task.detached](@next)";
