调用:一次工作的真实发生
Invocation 表达结构的一次执行。结构可以重复使用,每次普通运行都有自己的输入、活动窗口、取消信号和结果;同一个节点被调用两次,也对应两次独立活动。作者通常通过 Runner 和 Work 使用这些能力,无需直接操作内部调用对象。
从输入到最终交付
宿主调用 runner.run(input),等待返回的 Promise 得到整体结果。业务通过 Work 读取本次输入、操作资源、调用已登记成员。父层可以接收和转换孩子的结果,再决定下一步工作。
正式输入在资源捕获和收窄前固定;返回候选在取得后、最终成功前固定;父层接纳值在接收回调返回后固定。后续修改原对象不会改写已经成立的事实。数据需满足稳定值域,活实体、能力对象与任意闭包不能作为普通数据交付;真实 Error 仍按原引用传播,诊断另外固定。
这些规则不依赖是否安装 checkpoint。作者无需等到增加恢复能力时,才开始区分当前对象与已经交付的值。
三种“成功”各说明什么
以 writeNote 为例,可以分别发生:
| 边界 | 成立的事实 |
|---|---|
| Notes.append 落实 | 新便签已经进入实体 |
| 子调用 returned | 子工作已经交付成功值或失败 |
| 父层 accepted / handled | 父业务完成成功结果接纳,或处理了允许处理的失败 |
写入之后,模型的下一步仍可能失败;孩子返回之后,父层接收回调也可能失败。父层处理了孩子的普通错误,不会把孩子历史上的失败改成成功。接纳回调自身失败不会再次进入同一个 failed 回调,避免把接收失败当成来源重新失败。
取消、必要捕获、CP 与持久故障等有保护边界,不能靠普通业务 fallback 转成成功。需要追加补偿或重试时,应依据实体的真实结果设计,而非看到 Promise 拒绝就假设没有写入。
结束需要真实收尾
取消请求合作停止,不会立即释放尚在执行的代码。Invocation 等待已经启动的孩子真实退出并完成接纳排空,再关闭窗口和最终交付;未启动的关系不需要等待,也不会自动停止兄弟调用。独立 Interaction 的发送有自己的寿命,由宿主管理。
便签助手在一次根调用中完成读取、整理和追加,宿主最后检查实际读写并展示回答。可从运行教程观察结果,再读调用退出契约、稳定调用数据与异常参考核对精确边界。