/* Page prose (ja) */
"Overview" = "# Continuation\n\n今や `await` は自然に感じられますが、世の中のコードのほとんどはそれを話しません。前の章で見たクラシックな completion handler、`DispatchQueue` のあらゆるホップ、「あとで」発火するあらゆる delegate メソッド（そして実際のプロジェクトで出会う無数のシステムや SDK の API）は、非同期ではなく **コールバック** API です。`fetchThing { ... }` に `await` を振りかけてうまくいくことを期待することはできません。**continuation** は公式のアダプターです。これらの古いコールバック API の一つをラップして、外の世界がきれいな `await` で呼び出せるようにしてくれます。この章では、そのアダプターを手作業で作る方法を説明します。\n\n---\n\n## このページで学ぶこと\n\n* **continuation** とは何か、そしてなぜそれがコールバックから `await` への橋渡しなのか。\n* `withCheckedContinuation`: 非同期関数を中断し、コールバック API を実行し、コールバックが発火したときに **再開する**。\n* 失敗する可能性のある API のための `withCheckedThrowingContinuation`。`Result` 形式とクラシックな `(value, error)` 形式の両方をラップします。\n* 決して破ってはならない唯一のルール: **ちょうど一度だけ再開する**、そして「checked」continuation が滑ったときにどうやって捕まえてくれるか。\n* **delegate** スタイルの単発コールバックを一つの非同期呼び出しに橋渡しする方法。\n\n---\n\n## 必要な橋\n\nここにミスマッチがあります。非同期関数は上から下へと進み、各 `await` で **中断し**、結果が準備できるまでスレッドを返します。コールバック API は結果をまったく返しません。クロージャを渡してきて、終わった場所がどこであれ **あとで** それを呼び出します。二つの異なる世界です。\n\n**continuation** は「結果を渡されるのを待っている、中断された非同期関数の残り」を表す値です。それを一つ手に入れ、しまっておき、古いコールバック API を呼び出し、コールバックが発火したら値とともに continuation を **再開します**。その再開こそが、非同期関数を再び目覚めさせるものです。\n\n形はいつも同じです。\n\n```swift\nfunc modernVersion() async -> Result {\n    await withCheckedContinuation { continuation in\n        oldCallbackAPI { value in                   // the callback fires later...\n            continuation.resume(returning: value)   // ...and wakes us up\n        }\n    }\n}\n```\n\n`await withCheckedContinuation { ... }` の呼び出しは、まさにそこで **中断します**。*誰か* が `continuation.resume(...)` を呼び出すまで戻りません。渡したクロージャはすぐに実行されますが（そこで古い API を起動します）、`await` 自体は再開が着地するまで停止します。\n\n次のページでは、本物を一つ作って、中断と再開を見てみましょう。\n\n1 / 8 ページ  |  [次へ: 中断してから再開](@next)";
