/* Page prose (zh-Hans) */
"OrderingWorkWithDependencies" = "# 用依赖为工作排序\n\n`OperationQueue` 会乐意地**一次性**运行你交给它的所有东西，没有任何保证的顺序。对于相互独立的任务，这正是你想要的。对于流水线，这恰恰是你*不*想要的。\n\n**依赖**是一条规则，它说“在操作 A 完成之前，不要启动操作 B。”你用 `addDependency(_:)` 添加一条依赖。这是那条宣传册流水线，每个阶段都把它的结果交给下一个阶段：";
"OrderingWorkWithDependencies-2" = "**观察运行：**尽管我们添加操作的顺序是*装订 → 印刷 → 设计*，它们每一次都按**设计 → 印刷 → 装订**运行。队列一直拦着 `printing`，直到 `design` 完成；拦着 `binding`，直到 `printing` 完成。还要注意，每个阶段都读取了上一个阶段的输出（`design.layout`、`printJob.pages`），而且它总是在那里。\n\n最后这一点值得停下来想一想。依赖不只是*排序*工作；它保证前一个操作在后一个操作开始之前已经**彻底完成**。没有重叠，所以从 `PrintOperation` 内部读取 `design.layout` 是安全的：这两个操作从不会同时接触那个属性。依赖既给了你正确的顺序，*又*给了你一种简单、无竞争的传递数据的方式。\n\n> `addDependency(_:)` 只强制顺序。它**不**为你搬运数据。把版式传进 `PrintOperation` 的初始化器是你的活儿，不是队列的活儿。依赖说的是*什么时候*；你仍然要自己接好*是什么*。\n\n* callout(试一试): 删除 `binding.addDependency(printing)` 并再次运行：现在 `BindOperation` 打印什么，为什么？\n\n依赖甚至可以跨越队列：一个队列上的操作可以依赖另一个队列上的操作。队列只是在它的所有依赖都报告 `isFinished` 之前，不会启动一个依赖它们的操作。\n\n[上一页](@previous)  |  第 2 / 7 页  |  [下一页: 取消是一个礼貌的请求](@next)";
