/* Page prose (ja) */
"WrappingUp" = "# まとめ\n\n`async`/`await` の要点は、ブロックせずに待つコードです。スレッドが他の作業のために空いたまま、上から下へと読めます。心に留めておくべき唯一の考えは、`await` があなたの関数の *一時停止してスレッドを返せる* 場所を示すのであって、固まる場所ではない、ということです。以下のすべては、そのイメージを正しくつかむことから導かれます。\n\n* **`async`** 関数は一時停止して再開することがあります。それを **`await`** で呼び出します。`await` は *可能性のある* サスペンションポイントで、スレッドを固まらせるのではなく解放します。\n* **タスクはスレッドではありません。** Swift は多くのタスクを小さな協調的プール（コアあたり約1スレッド）の上に多重化します。中断されたタスクはスレッドを返し、別のスレッドで再開することがあります。プールのスレッドをブロックすること（たとえば `Thread.sleep`）はクラシックな間違いです。ブロックせず、中断しましょう。\n* 落とし穴: 独立した作業を立て続けに await しないでください。2つの順番に並んだ `await` は待機を積み上げます（うっかり2秒かかるラテ）。**`async let`** を使って独立した作業を一度に開始し、待機を重ね合わせて合計時間を縮めましょう。\n* 落とし穴: `await` を一度もしない `async let` は、スコープの終わりでキャンセルされ、その結果は捨てられます。`async let` は *await するという約束* です。それを守りましょう。\n* `await` は非同期コンテキスト内でしか使えません。同期コードから渡るには **`Task { }`** を使います（トップレベルの `await` はコンパイルできません）。\n* **`async throws` + `try await`** はエラーを素朴な `do-try-catch` へ戻します。completion handler のエラー配管よりずっとすっきりしています。`try` を忘れるのはコンパイルエラーであって、静かなバグではありません。\n\n---\n\n## 次は\n\n[タスクとキャンセル](Tasks%20and%20Cancellation.playgroundchapter/Overview): `Task` が本当は何なのか、タスクがどのように木構造を作るのか、そしてもう必要のない作業をどう止めるか。\n\n[前へ](@previous)  |  8 / 8 ページ";
