/* Page prose (ja) */
"WrappingUp" = "# まとめ\n\ncontinuation は、モダンな世界が古いコールバック API を `await` できるようにするアダプターです。`await` で中断し、コールバックが発火したときに再開します。すべては一つの法則、どの経路でも **ちょうど一度だけ再開する** に基づいており、下のポイントのほとんどは、その唯一の法則をさまざまな角度から見たものです。\n\n* **continuation** はコールバック / completion / delegate の API を `async`/`await` に橋渡しします。`await` で中断し、コールバックが発火したときに再開します。\n* 常に成功するコールバックには `withCheckedContinuation`、失敗する可能性のあるものには `withCheckedThrowingContinuation`（および `resume(throwing:)`）。`resume(with:)` は `Result` を一行でアンラップします。\n* 黄金律: どの経路でも **ちょうど一度だけ再開する**。各分岐をたどりましょう。再開ゼロ回 → 静かなハング。二回 → クラッシュ。繰り返す可能性のあるコールバックは、最初の再開の後に保存した continuation を nil にして守りましょう。\n* **Checked** continuation は両方を捕まえます。二重再開でトラップし、リークした（決して再開されない）continuation について警告します。その警告を黙らせず、学んでいる間は `withUnsafeContinuation` より checked を選びましょう。\n* **単発の delegate** は、delegate メソッドで再開する小さなアダプターで橋渡しし、再開するまでそれへの強い参照を生かしておきましょう。さもないと `weak` な delegate が早くに解放され、continuation をリークしかねません。\n* continuation は一度きりです。繰り返し発火するコールバックには、[AsyncSequence と AsyncStream](AsyncSequence%20and%20AsyncStream.playgroundchapter/Overview) の章の `AsyncStream` を使いましょう。\n\n---\n\n## 次は\n\n**[Task Groups](Task%20Groups.playgroundchapter/Overview)**: 一つの非同期呼び出しが簡単になった今、*たくさんの* 呼び出しを一度に実行し、安全に並列で、すべての結果を集めるにはどうすればよいでしょうか？\n\n[前へ](@previous)  |  8 / 8 ページ";
