/* Page prose (zh-Hans) */
"WrappingUp" = "# 小结\n\n把工作包进一个 `Operation` 对象，是用闭包的便利去换取复用和控制，这笔交易只有在你需要那个对象时才划算。这里大多数的困惑都关于时机：工作究竟什么时候运行，以及它的结果什么时候准备好。把下面这些生命周期节点理清楚，操作就会保持可预测。\n\n* 一个 **`Operation`** 是被包裹成对象的工作，所以它可以携带名字、状态、输入和输出，并在之后支持取消和依赖。\n* **`BlockOperation`** 是快速的选择；`.start()` **在当前线程上同步地**运行它，所以单靠它不会给你并发。把它加入队列，才能把工作移出主线程。\n* 一个 **`OperationQueue`** 在后台线程上运行操作。默认情况下它一次运行好几个，所以完成的顺序是不可预测的；只有 **`maxConcurrentOperationCount = 1`** 才能让它变成串行且有序。\n* **为 `Operation` 创建子类**并重写 **`main()`**，用于带有存为属性的输入和输出的可复用工作；让它保持同步，它就在 `main()` 返回时完成。永远不要自己调用 `main()`：调用 `start()` 或加入队列，由队列来管理操作的状态。\n* 操作是**一次性的**（每个实例只启动一次，要重新运行就新建一个），并且只在工作完成*之后*才读取输出，绝不要紧接着 `addOperation` 就读。\n* 简单的发射后不管闭包就选 GCD；当你需要把工作作为一个可管理的对象时就选操作。\n\n---\n\n## 接下来\n\n下一章讲 [operation 的依赖与取消](Operation%20Dependencies%20and%20Cancellation.playgroundchapter/Overview)：如何说“在打印*之后*装订”，如何取消已经排入队列的工作，以及如何编写工作比 `main()` 活得更久的操作。\n\n[上一页](@previous)  |  第 9 / 9 页";
