/* Page prose (zh-Hans) */
"MainActorMainThread" = "# `@MainActor`：主线程，由编译器检查\n\nUI 状态只能在主线程上触碰。遵守这条规则的经典做法是把每次更新都包进 `DispatchQueue.main.async`，并*寄希望于*自己永远不会忘记。`@MainActor` 替你完成这项工作：把一个类型标记为 `@MainActor`，它的每一个方法都**保证**在主线程上运行，无论谁调用它，而且编译器会检查这一点。\n\n为了看到这份保证做真正的工作，我们特意用 `Task.detached` 从一个**后台线程**开始，然后调用一个 `@MainActor` 的显示器。一个小助手会报告我们是否在主线程上，因为 Swift 不让你在异步任务内部*直接*读取 `Thread.isMainThread`：任务可以在线程之间跳转，所以一次裸读会不可靠。";
"MainActorMainThreadNotice" = "从上到下阅读输出。第一行打印 `false`：我们确实在一个后台线程上。每一行 `deposit` 都打印 `true`：`@MainActor` 替我们把那份工作拉到了主线程上。我们从主线程之外开始，然而显示器却只在主线程上被触碰过，而且我们一次都没有写 `DispatchQueue.main.async`。这就是 `@MainActor` 的全部承诺。\n\n你确实得在每个 `deposit` 之前写 `await`。这正是下一页要讲的内容。\n\n* callout(试一试): 把 `Task.detached` 改成一个普通的 `Task`。一个普通的 `Task` 会继承页面的上下文，也就是 main actor，所以现在连第一行都打印 `true`：从来就没有一个后台线程需要离开。是 `Task.detached` 把我们放到了后台线程上。\n\n[上一页](@previous)  |  第 2 / 11 页  |  [下一页: 跨入 main actor](@next)";
