/* Page prose (zh-Hans) */
"Overview" = "# async/await 基础\n\n回到咖啡吧，想象你点了一杯拿铁，然后拿到一张取餐票：“好了我们会喊你的名字。”这就是 **completion handler**：来自章节 [为什么需要现代并发](Why%20Modern%20Concurrency.playgroundchapter/Overview) 的回调风格。它能用，但等待喊名的代码会变得纠缠不清：嵌套的闭包、硬塞在一旁的错误处理，而且没办法从上到下顺着读完整个订单。本章引入 `async`/`await`，它让你把等待的代码写得像一份普通的食谱，一行接一行，同时 *不* 冻住咖啡师。\n\n---\n\n## 你将学到\n\n* 如何 **定义** 一个 `async` 函数，并用 `await` 来 **调用** 它。\n* `await` 真正的含义：一个 **挂起点**，而不是一次阻塞。\n* 为什么任务 **不是** 线程，以及少数几个线程如何运行成千上万的任务。\n* 如何用 `Task { }` 从普通的同步代码抵达异步代码。\n* `async throws` + `try await` 如何把错误处理重新变回朴素的 `do-try-catch`。\n* 如何用 `async let` **并发** 运行互不依赖的工作，并看到总时间缩短。\n\n翻到下一页，定义你的第一个 `async` 函数。\n\n第 1 / 8 页  |  [下一页](@next)";
