用途:在已确认处于正确隔离域时,同步访问 Actor 隔离状态,避免异步跳转开销。适用于同步测试 MainActor 代码、文档保证主线程回调的旧式 delegate、性能敏感代码以及协议回调保证在特定 Actor 的场景。
主要能力:提供 MainActor.assumeIsolated 与自定义 Actor 的 assumeIsolated 同步执行方法;介绍 @preconcurrency 作为等价简写,自动包裹 assumeIsolated。
使用方式:MainActor.assumeIsolated 接收 @MainActor 闭包同步执行,非主 Actor 串行执行器时崩溃。@preconcurrency 用于协议遵循,当协议后续加入隔离时该属性会失效并警告。
限制:不确定当前隔离、已在异步上下文、需跨 Actor 调用或回调来源不可信时不应使用。不要把 assumeIsolated 当作消除编译器警告的手段,不确定时应改用 await。GCD 主队列通常等同 MainActor 但不保证。崩溃是有意设计,避免竞态损坏数据。
资料提供 WWDC 2024-10169 等参考。