/* Page prose (ja) */
"CooperativeCancellation" = "# 協調的キャンセル\n\n誰もが驚くのがここです。**タスクをキャンセルしても、タスクは停止しません。**\n\n`task.cancel()` を呼ぶと、Swift はフラグを立てます。そのタスクとそのすべての子について `isCancelled` が `true` になります。それが行うことの*すべて*です。CPU を奪い取ることも、ループの途中にスローを差し込むことも、戻ることを強制することも、決してありません。実行中の処理は、自らフラグを*確認*して停止を決めるまで、実行を続けます。これは**協調的キャンセル**と呼ばれます。システムが要請し、コードが協調するのです。\n\nつまり、キャンセル可能なコードは*確認しに行く*必要があります。確認する方法は3つあります。\n\n* **`Task.isCancelled`**: いつでも読める `Bool` です。確認して早めに戻りましょう。\n* **`try Task.checkCancellation()`**: キャンセルされていれば `CancellationError` をスローするので、1行で確認と離脱の両方を行います。\n* **`Task.sleep`**、これはすでに代わりに確認してくれます。タスクがスリープ中にキャンセルされると、`Task.sleep` は時間を待ちきる代わりに `CancellationError` をスローします。\n\n本物を作ってみましょう。長時間実行されるジョブを途中でキャンセルし、各ステップの間で確認しているおかげで*すぐに*停止する様子を見ます。バリスタが大きなケータリングの注文のために、豆をバッチごとに挽いている様子を思い浮かべてください。";
"CooperativeCancellation-2" = "**実行して確認:** いくつかの `Grinding batch...` の行（タイミングからしておよそ3行）が表示され、次に `>>> Order cancelled`、それから `Grinder stopped early...` が表示されます。挽くループはバッチ4か5にいましたが、20すべてを挽く代わりに、キャンセルされてから1ステップ以内で停止しました。2つの確認が働きました。`Task.sleep` は `cancel()` がスリープの途中で届いた瞬間にスローし、`checkCancellation()` が各ループの先頭を守ります。*両方の*確認をコメントにすると、いつキャンセルしてもループは20バッチすべてを挽きます。キャンセルが命令ではなく要請であることの証拠です。\n\n* callout(試してみよう): キャンセルの遅延を `800` から `200` に変えてみましょう。停止するまでに何バッチが挽かれますか？\n\n[前へ](@previous)  |  7 / 11 ページ  |  [次へ: 優雅にキャンセルする](@next)";
