/* Page prose (zh-Hans) */
"DistributedAsyncAndThrows" = "# 分布式调用既是 `async` *又是* `throws`\n\n这是与本地 actor 最重要的区别，也是要刻进记忆里的那一条。\n\n调用一个本地 actor 方法是 `async` 的：你对它 `await`，因为你可能得排队等候 actor 的隔离轮到你。但它并**不**会仅仅因为是一次 actor 调用就抛出错误；一旦你进去了，调用就在进程内运行，途中不会失败。\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`，它自己也从不抛出。抛出是由运行时*在调用点*加上的：它代表**传输失败**，也就是消息从未完成往返的可能性。这是模型在对你诚实：一次远程调用从根本上就是比本地调用更脆弱的东西，而类型系统不会让你假装不是这样。\n\n> **这是 [async/await 基础](Async%20Await%20Basics.playgroundchapter/Overview) 一章里 `await` 的那份诚实，放大了。**\n> 在那里，`await` 标记着“这里可能暂停”。而这里，分布式调用上的 `try await` 标记着“这里可能暂停*而且*可能根本无法完成”。这些关键字做的还是它们一贯的工作，在你发起调用的地方，把一次调用的代价变得可见。\n\n[上一页](@previous)  |  第 5 / 9 页  |  [下一页: Codable 参数](@next)";
