/* Page prose (ja) */
"StructuredVsUnstructured" = "# 構造化 vs 非構造化\n\nSwift の並行処理にはタスクの2つの系統があり、それらを区別することがこの章で最も役立つメンタルモデルです。\n\n**構造化タスク**とは、その生存期間がコード内の*スコープに束縛された*子タスクです。親の内部で作成され、親はすべての子が終了する（またはキャンセルされる）まで戻ることができません。構造化タスクは **`async let`**（この後で出会います）と**タスクグループ**（後の章）から得られます。コンパイラがネストを強制するので、子は親より長生きできません。リークもなく、忘れられた処理もありません。\n\n**非構造化タスク**とは、`Task { }` や `Task.detached { }` を使って手作業で作成するタスクです。これは周囲のスコープに結び付けられて*いません*。それを作成した関数が戻った後も実行を続け、その責任は**あなた**にあります。ハンドルを保持し、値を待ち、適切なときにキャンセルする、といったことです。\n\n構造化された形を見てみましょう。`async let` は子タスクをすぐに開始し、その最終的な結果を名前に束縛します。その名前を後で `await` します。";
"StructuredVsUnstructured-2" = "**実行して確認:** お茶とミルクは順番にではなく、*同時に*用意されます。全体で約0.5秒（2つのうち長いほう）かかり、0.8秒ではありません。どちらの子も `Task` ブロックが終わる前に必ず終了します。これが「スコープに束縛される」という保証です。仮に `await` を書かなかったとしても、Swift はスコープの終わりで暗黙的にそれらを待ちます。構造化された子が見捨てられることは決してありません。\n\n* callout(試してみよう): `steepTea` の遅延を `.milliseconds(900)` に上げてみましょう。トレイは依然として2つのうち*長いほう*の時間くらいで届きますか、それとも両方の合計の時間で届きますか？\n\nこれを、これまで使ってきた非構造化の `Task { }` と対比してみましょう。こちらは自由に漂います。その自由さが目的になることもあります（たとえば、SwiftUI のボタンのタップから処理を始める場合など）が、それはセーフティネットが失われることを意味します。自分で待たない限り、誰も待ってくれません。\n\n[前へ](@previous)  |  4 / 11 ページ  |  [次へ: Task.detached](@next)";
