Appearance
异步、取消与线程语义
Readori 使用 Swift Concurrency;JavaScriptCore context 固定在专属串行队列,避免跨线程访问 导致 EXC_BAD_ACCESS。WKWebView 操作位于 MainActor。
规则
- 用户停止/切换/退出会取消关联 Task;
- callback 安装结果前检查 generation/request identity;
- timeout 取消底层请求而非只停止等待;
- background/thermal state 传播到验证、预取、TTS 和 WebView;
- 不在 JS 串行队列做不可取消长 sleep;
- UI 更新回 MainActor,网络/解析/分页不占主线程。
脚本回调和异步宿主操作必须桥接 Swift cancellation,不能让旧请求覆盖新书、新章节或新 TTS 引擎。
