/* Page prose (zh-Hans) */
"CancellationIsAPoliteRequest" = "# 取消是一个礼貌的请求\n\n假设顾客在一次 200 页的印刷进行到一半时打来电话取消。你想*现在*就停止浪费墨粉。每个 `Operation` 都有一个 `cancel()` 方法，但让人意外的是这一点：\n\n**`cancel()` 不会停止你的代码。它只是把一个标志（`isCancelled`）设为 `true`。你的操作必须自己注意到那个标志并主动退出。**\n\n这叫做**协作式取消**：系统发出请求，你的代码配合。没有任何东西会在指令执行到一半时被强行杀死。如果你的 `main()` 从不检查 `isCancelled`，调用 `cancel()` 不会改变任何事情；工作会一直运行到完成。\n\n所以规则是：在合理的位置检查 `isCancelled`，尤其是在循环内部和昂贵的步骤之前。";
"CancellationIsAPoliteRequest-2" = "**观察运行：**你会看到三到四页被渲染，然后是 `📣 Customer cancelled the order`，接着紧挨着的下一次循环迭代看到 `isCancelled == true`，并打印 `🚫 Rendering stopped early...`。剩下的页面永远不会被渲染。试着删除 `if isCancelled` 检查再运行一次：现在无论是否取消，全部十页都会被渲染：这证明了 `cancel()` 本身只是一个请求。\n\n* callout(试一试): 把取消的延迟从 `1` 改为 `0.1`：在它停止之前会渲染多少页？\n\n有两个细节要牢牢记住：\n\n* **`completionBlock` 仍然会运行。**一个被取消的操作仍然是一个*完成了的*操作。这就是为什么你经常在完成回调内部检查 `isCancelled`，以决定你是成功了还是中途退出了。\n* **要一次性取消一个队列上的所有东西，**调用 `queue.cancelAllOperations()`。它会向队列知道的每个操作发送 `cancel()`，但每个操作仍然必须自己检查标志。\n\n[上一页](@previous)  |  第 3 / 7 页  |  [下一页: 异步操作](@next)";
