/* Page prose (zh-Hans) */
"WhichToolWhen" = "# 哪个工具用在何时：一份小抄\n\n把这个留在手边。在新代码里，从**现代**那一列开始；只有出于列出的某个理由，才降到**经典**那一列。\n\n* **把工作放到主线程之外运行。**  \n现代：`Task { }`。经典：`queue.async`。\n* **运行两三个事先已知的、互相独立的获取。**  \n现代：`async let`。经典：`DispatchGroup`。\n* **运行数量可变的并行作业。**  \n现代：`TaskGroup`。经典：组 + 信号量。\n* **保护共享的可变状态。**  \n现代：`actor`。经典：串行队列或计数为 1 的信号量。\n* **触及 UI / 返回主线程。**  \n现代：`@MainActor`。经典：`DispatchQueue.main.async`。\n* **处理一段时间内的事件流。**  \n现代：`AsyncStream`。经典：delegate 或重复的回调。\n* **桥接一个现有的回调 API。**  \n现代：`withCheckedContinuation`。经典：*这就是你跨越过去的方式*。\n* **取消进行中的工作。**  \n现代：协作式的 `Task` 取消。经典：`Operation.cancel()` + 手动 `isCancelled`。\n\n---\n\n有一种情况反过来：当你确实需要一个**特定的队列、QoS、定时器源或屏障**时，GCD 仍然是那个正确、直接的工具，而且没有现代替代品可以去用。\n\n[上一页](@previous)  |  第 7 / 8 页  |  [下一页: 小结](@next)";
