/* Page prose (zh-Hans) */
"TheGoldenRule" = "# 黄金法则：恰好恢复一次\n\n关于 continuation 的一切都归结为一条法则：\n\n**你必须恰好恢复一个 continuation 一次。永远不要零次。永远不要两次。**\n\n两种失败在当下都是悄无声息的，之后却很凶险：\n\n* **恢复零次**：  \n你拿到 continuation，然后某条路径（一个提前的 `return`、一个 `guard`、一个你忘记的错误分支）跳过了恢复。等待你的那个异步函数**永远挂起**。默认没有崩溃、没有日志：只有一个任务在程序的整个生命周期里冻结着，攥着它捕获的一切。这正是上一页那个\"既无值也无错误\"分支所避免的陷阱。\n* **恢复两次**：  \n两个回调都触发，或者你在循环里恢复，或者一次重试第二次回调回来。第二次恢复会破坏并发运行时。\n\n这就是你使用 **checked** 变体的原因：`withCheckedContinuation` 和 `withCheckedThrowingContinuation`。\"Checked\"意味着运行时会*盯着*你的 continuation，专门盯这两个错误：\n\n* 恢复它**两次**，它就会故意**触发陷阱** (trap)：一次硬崩溃，带着类似 `SWIFT TASK CONTINUATION MISUSE: ... tried to resume its continuation more than once` 的消息。故意搞得很吵：一次双重恢复是个真正的 bug，测试中一次清晰的崩溃胜过生产环境中神秘的损坏。\n* 让它**泄漏**（在从未被恢复的情况下被释放），它就会记录一条类似 `... leaked its continuation without resuming it` 的警告，准确告诉你是哪个包装器卡死了。\n\n还有一对不带这些检查的 `withUnsafeContinuation`。在学习阶段先别管它：checked 版本几乎不花什么成本，却能把无声的卡死和损坏变成吵闹的、找得到的问题。只有当一个包装器被证明是正确的、而且你已经测量出这项检查确实要紧时，才去动用\"unsafe\"。\n\n实用的习惯：对于穿过你回调的**每一条**路径（成功、每个错误、那个看起来不可能的 `else`），都问一句\"这会恢复 continuation 吗？\"每一条路径上都必须恰好发生一次恢复。\n\n[上一页](@previous)  |  第 5 / 8 页  |  [下一页: 桥接 delegate](@next)";
