首页 / 课程 / D08 深挖
Part 2: 高级特性 · 第 16 讲

24 讲路线 · 与 S08 配对

D08: Task Management 深挖 · 任务管理

本讲在 S08 主线之上,聚焦实现细节、边界条件与自测;导图与主线相同模块,便于对照。

建议:先读完 S08,再按下方顺序走读源码与练习。

模块导图(与 S08 同源,便于对照):依赖图、调度与失败重试

🔬 深挖目标

任务系统把「多步工作」从模型幻觉里拽到可持久化数据结构:依赖、状态、重试与并发上限都要在代码层可验证。

🧱 数据模型(自查)

  • 任务节点:id、title、状态机(pending/running/blocked/done/failed)。
  • 依赖边:DAG 还是允许软依赖?失败是否级联取消?
  • 调度器:与主 loop 是同线程还是 job queue?

🔁 失败与重试

失败类型建议策略
工具瞬时错误有限次指数退避 + 可观察日志
权限拒绝不要自动重试;回到 D03 等人
模型胡写 plan校验 DAG 无环 + 人工 / 规则 gate

🔗 与 Subagent

常见模式:父任务拆子任务 → 子代理执行 → 父任务合并;确认子任务失败是否会阻塞父任务依赖解析。

📖 走读顺序

  1. 搜索 tasktodoqueuescheduler,缩小到任务模块目录。
  2. 画一张 5 个状态以内的状态机,并与实际枚举对比。
  3. 模拟:任务 A 依赖 B,B failed,UI 与 API 各应表现什么?

✏️ 自测 1 · 参考答案:并行任务如何避免双写?

题干

若允许并行 3 个 running 任务,如何避免同一文件被双写?

结论

  • 文件级锁 / 租约:任务开始前对将修改的路径集合申请锁,冲突则排队或失败 fast。
  • 分区所有权:调度器把目录树切片,保证并行任务写集合不相交
  • 最后写者检测:写前读 checksum,不匹配则中止并把冲突交给模型/用户(与 git 冲突类似)。

✏️ 自测 2 · 参考答案:只存 title 不存验收?

题干

任务持久化若只存 title 不存 acceptance criteria,会有什么问题?

结论

  • 模型与用户会对「什么叫完成」各说各话,无法自动验收,任务状态沦为摆设。
  • 恢复会话或换人接手时,无法判断旧任务是真完成还是被跳过
  • 建议至少存:可机读的 完成条件(测试命令、文件存在、URL 返回码)或指向 spec 的链接/片段。

✏️ 自测(题干回顾)