/* Page prose (ja) */
"DistributedAsyncAndThrows" = "# 分散呼び出しは `async` *かつ* `throws`\n\nここに、ローカル actor との最も重要な違い、そして記憶に焼き付けるべきものがあります。\n\nローカル actor のメソッドを呼び出すのは `async` です。actor の分離のために自分の番を待たなければならないかもしれないので、`await` します。しかし actor の呼び出しだというだけで throw することは**ありません**。いったん中に入れば、呼び出しはプロセス内で実行され、途中で失敗することはできません。\n\n**分散**呼び出しは `async` **かつ** `throws` です。なぜなら今や呼び出しはネットワークを越えるかもしれず、ネットワークは失敗するからです。接続が切れることもあれば、リモートのマシンに到達できないこともあり、メッセージがタイムアウトすることもあります。そのどれも隠すことはできないので、コンパイラは `try` によってそれに向き合うことを強制します。\n\n```swift\n// Local actor, await only:\nawait ledger.deposit(1)\n\n// Distributed actor, try await, because the wire can fail:\ntry await remoteLedger.deposit(1)\n```\n\n`distributed func deposit` の定義を振り返ってみてください。その本体は `throws` と印づけられておらず、それ自体が throw することは決してありません。throw する性質は、ランタイムによって*呼び出し側*で追加されます。それは**トランスポートの失敗**、つまりメッセージが往復を果たせなかった可能性を表します。これはモデルがあなたに正直であるということです。リモート呼び出しはローカルのそれより根本的に壊れやすいものであり、型システムはそれを取り繕わせてはくれません。\n\n> **これは [async/await の基礎](Async%20Await%20Basics.playgroundchapter/Overview) の章の `await` の正直さを、スケールアップしたものです。**\n> あそこでは、`await` が「これは一時停止するかもしれない」と印づけていました。ここでは、分散呼び出しに対する `try await` が「これは一時停止するかもしれず、*しかも*まったく完了しないかもしれない」と印づけます。キーワードは昔から変わらず同じ仕事をしていて、呼び出しのコストを、それを行う地点で目に見えるようにしているのです。\n\n[前へ](@previous)  |  5 / 9 ページ  |  [次へ: Codable な引数](@next)";
