SuperAPI AI 工具集

axiom-assume-isolated

编程与开发

查看项目

更新于 10-16 00:22

技能介绍

用途:在已确认处于正确隔离域时,同步访问 actor 隔离状态,避免异步跳转开销。资料列出适用场景:同步测试 MainActor 代码、文档保证主线程执行的旧式委托回调、性能敏感代码、回调保证在特定 actor 上执行的协议一致性。

主要能力:MainActor.assumeIsolated 静态方法同步执行并在隔离错误时崩溃;自定义 actor 的 assumeIsolated 以 isolated Self 访问状态;@preconcurrency 作为等价简写自动包裹 assumeIsolated。资料给出 Task { @MainActor in } 与 assumeIsolated 的对比:前者延迟、可 await、任意上下文、失败仍运行;后者同步、仅同步函数、必须在正确隔离下、否则崩溃。

使用方式:资料提供五种模式,包括同步测试 ViewModel、旧式委托回调中更新状态、用扩展上的 @preconcurrency 替代手写包裹、在未知上下文时先用 Thread.isMainThread 判断再用 DispatchQueue.main.sync、以及自定义 actor 的同步读取。当协议后续增加隔离标注时,@preconcurrency 会失去作用并产生警告。

限制与风险:不确定当前隔离时应改用 await 或 MainActor.run;GCD 主队列与 MainActor 通常相同但不保证;异步上下文中无需再包裹;不得用 assumeIsolated 压制编译器警告,否则可能在非目标 actor 上崩溃。按 Apple 文档,若当前上下文不在 actor 串行执行器上会触发致命错误,该崩溃是有意设计。可参考 WWDC 2024-10169 及相关文档,另见 axiom-swift-concurrency 技能。