/* Page prose (zh-Hans) */
"JobInThreeSteps" = "# 一个分三个相互依赖步骤的任务\n\n回到**印刷厂**。要做出一本小册子，有三件事必须*按顺序*发生，每一件都需要前一件：\n\n1. **加载一个设计稿**（一个用来印刷的模板）。\n2. 从那个设计稿**渲染一份校样**（它会变成多少页）。\n3. 根据那个页数**装订成册**。\n\n这里是三个异步的构建块。每一个都用 `asyncAfter` 模拟真实的等待（一次磁盘读取、一次渲染、一趟装订），并通过一个带着 `Result` 的 completion handler 回报结果。因为每一步都需要上一步的结果，所以每个调用都嵌套在上一个 handler 里。我们把它放进一个小类里，好让一个现实世界的细节也一同出现：这些闭包捕获了 `self`，所以我们不得不考虑循环引用。";
"JobInThreeSteps-2" = "**观察运行：**大约一秒半之后，你会看到 `✅ Ready: Booklet(12 pages)`。它能用。但看看*到底花了多大力气*才让三个有序的步骤跑起来，也看看这中间每一处本可能出错的地方。\n\n* callout(试一试): 删掉 `DispatchQueue.main.async { ... }` 这层包裹，直接调用 `completion(.success(booklet))`。这里的输出看起来一模一样，而这恰恰就是为什么一个被遗忘的主线程跳转会那么轻易地被发布出去。\n\n[上一页](@previous)  |  第 3 / 6 页  |  [下一页: bug 藏在哪里](@next)";
