/* Page prose (zh-Hans) */
"MainActorRun" = "# `MainActor.run`：一次性跳到主线程\n\n当一个类型的职责就是 UI 时，把整个类型标记为 `@MainActor` 是正确的选择。但有时你正深陷在后台工作里，一次大计算、一次解析、一次批量导入，而只有*一小块*需要 main actor：更新显示器的那一刻。仅仅为此就把整个任务搬到主线程上会浪费主线程。\n\n`MainActor.run { }` 在 main actor 上运行单个闭包，等待它完成，然后把它的结果交还回来。这里我们在后台线程上做繁重的工作，然后只把显示器的更新跳到主线程上：";
"MainActorRunNotice" = "第一行打印 `false`：加法在主线程之外运行，繁重的工作本就属于那里。在 `MainActor.run` 内部，存款打印 `true`：那一个闭包，而且只有那一个闭包，在 main actor 上运行。它返回的值跨越那次跳转回来了，所以 `shown` 在主线程之外又可以使用了。\n\n这是“把繁重的活儿放在主线程之外做，然后用 `DispatchQueue.main.async` 更新标签”的现代回响，只不过它是一个表达式，它可以返回一个值，而且编译器保证这个闭包真的在主线程上运行。\n\n* callout(试一试): 在同一个 `MainActor.run` 块里再加一个 `display.deposit(25)`。两次更新在*一次*跳到主线程中发生。没有 `MainActor.run`，你就得分别 `await` 每一个，为每一行来回跳转。\n\n## 在主线程上运行整个任务\n\n`MainActor.run` 跳转单个闭包。当你想让一个*整个*任务在 main actor 上运行时，从任何地方，甚至在后台代码的深处，都可以用 `Task { @MainActor in }` 来启动它：\n\n```swift\nTask { @MainActor in\n    display.deposit(25)   // already on the main actor, so no await\n    display.deposit(25)\n}\n```\n\n里面的一切都在 main actor 上运行，所以你在上一页需要的那些 `await` 就干脆消失了。\n\n[上一页](@previous)  |  第 4 / 11 页  |  [下一页: 只标记一个函数或属性](@next)";
