proposal.md
2.83 KB
Proposal: 添加任务队列系统
问题陈述
当前图像生成和款式设计功能是阻塞式的:
- 用户点击"生成"后必须等待任务完成才能进行其他操作
- 无法同时提交多个生成任务
- 生成过程中 UI 被锁定,影响用户体验
真实使用场景:
- 用户想生成 3 个不同风格的戒指对比效果
- 当前必须等待第一个生成完成,才能提交第二个
- 总计等待时间 = 15s × 3 = 45 秒,期间只能干等
解决方案
方案 A: 底部状态栏任务队列(推荐)
在 MainWindow 底部添加可折叠的任务队列状态栏:
- 默认折叠,显示当前任务摘要和队列长度
- 点击展开查看详细任务列表
- 支持排队提交多个任务
- 后台异步执行,UI 不阻塞
┌─────────────────────────────────────────┐
│ [图片生成] [款式设计] [历史记录] │
│ │
│ (当前 tab 内容) │
│ │
├─────────────────────────────────────────┤
│ ● 任务队列: [生成x1] [设计x2] │ ← 新增
│ 正在处理: 生成银戒图片... │
│ [展开▼] │
└─────────────────────────────────────────┘
️ 核心组件
- Task 数据模型: 统一的任务数据结构
- TaskQueueManager: 单例任务队列管理器
- TaskQueueWidget: 底部状态栏 UI 组件
详细设计见 design.md
成功标准
- 用户可以连续提交多个任务而不阻塞 UI
- 任务按提交顺序依次执行
- 实时显示任务状态(等待/运行中/完成/失败)
- 任务完成后自动更新对应 tab 的显示
- 队列满时友好提示用户
风险与缓解
| 风险 | 缓解措施 |
|---|---|
| Worker 生命周期管理 | TaskQueueManager 持有引用直到任务完成 |
| 信号连接泄漏 | 使用 Lambda + 任务 ID 精确匹配 |
| 队列无限增长 | 硬限制最大 10 个任务 |
| 破坏现有功能 | 保留现有 ImageGenerationWorker 不修改 |
影响范围
- 新增: 3 个类 (~500 行)
- 修改: MainWindow, GenerationTab, StyleDesignerTab 集成代码 (~50 行)
- 不影响: 历史记录、数据库、配置文件
实现计划
见 tasks.md
待确认问题
- 任务完成后是否需要弹窗通知?
- 是否自动切换到对应 tab 显示结果?
- 失败任务是否支持一键重试?
- 队列容量 10 是否合适?
- 任务完成后是否自动保存到历史记录?