已知问题
无通用取消机制
Section titled “无通用取消机制”没有通用的异步取消。Stream 订阅取消只停止新事件的传递;C++ 侧继续运行并静默丢弃后续的 add() 调用。
codegen 不是构建步骤
Section titled “codegen 不是构建步骤”代码生成必须在 API 头文件变更后手动运行。Native Assets hook 只负责编译和链接,不会重新生成代码。
不支持类型别名
Section titled “不支持类型别名”codegen 无法解析 using Foo = ... 或 typedef ...。头文件中请直接使用实际类型并写完整命名空间。
不透明类限制
Section titled “不透明类限制”- 不能跨 Isolate 共享
- 不支持继承、虚函数、方法重载
- 字段访问需手写 getter/setter
- 阻塞工作必须使用
spawn_blocking或投递到thread_pool set_pool_threads()必须在 Runtimestart()之前调用- Runtime 默认使用一个 io runner;需要多 runner 时在启动前配置
ioThreads, 并自行同步共享状态 - 多个 io runner 不会让阻塞等待自动安全:原始
stdexec::sync_wait会一直占用 当前 runner;如果所有 runner 都等待该 scheduler 上的任务,整个 scheduler 会 死锁;dcb::sync_wait会拒绝 io runner 上的调用 - 生成的代码需要手动运行
dcb_gen_tool generate重新生成 - 头文件应只放声明,数据类和不透明类必须定义在被扫描的头文件内
DartFn::operator()仅异步;阻塞调用从 worker 或外部线程使用dcb::sync_wait(...),且禁止在 io 线程上执行