2026-03-26 16:45:24 +08:00
|
|
|
|
# TaskGroup::AddTask
|
|
|
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
|
向任务组添加一个任务对象或 lambda 任务。
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
|
|
|
|
|
```cpp
|
|
|
|
|
|
uint64_t AddTask(std::unique_ptr<ITask> task);
|
2026-03-26 20:59:59 +08:00
|
|
|
|
uint64_t AddTask(Callback&& func, TaskPriority priority = TaskPriority::Normal);
|
2026-03-26 16:45:24 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
|
## 行为说明
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
|
`AddTask(std::unique_ptr<ITask>)` 当前会:
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
|
1. 加锁保护 `m_tasks`。
|
|
|
|
|
|
2. 取出 `task.get()` 保存到内部 `TaskNode::task`。
|
|
|
|
|
|
3. 用当前 `m_tasks.size()` 作为返回的任务 ID。
|
|
|
|
|
|
4. 把节点追加到 `m_tasks`。
|
|
|
|
|
|
5. 递增 `m_pendingCount`。
|
|
|
|
|
|
6. 对传入的 `unique_ptr` 调用 `release()`。
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
|
`AddTask(Callback&&, TaskPriority)` 会先构造一个 `LambdaTask<Callback>`,然后转发到上面的重载。
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
|
## 参数
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
|
- `task` - 要加入任务组的任务对象。
|
|
|
|
|
|
- `func` - 要包装成 lambda 任务的可调用对象。
|
|
|
|
|
|
- `priority` - lambda 任务的优先级。
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
|
## 返回值
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
|
- 返回任务在当前任务组内的索引式 ID。
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
|
## 当前实现限制
|
|
|
|
|
|
|
|
|
|
|
|
- 当前只把任务放进 `TaskGroup` 内部数组,不会提交到 [TaskSystem](../TaskSystem/TaskSystem.md) 队列。
|
|
|
|
|
|
- `task.release()` 之后,任务组接管的是裸指针,但当前析构函数不会释放这些对象。
|
|
|
|
|
|
- `pendingDepCount` 是在节点尚未添加依赖时按 `dependencies.size()` 计算的,因此始终初始化为 `0`。
|
|
|
|
|
|
- 当前不会在这里更新任务状态,也不会触发任何执行逻辑。
|
|
|
|
|
|
- 返回的任务 ID 仅是组内索引,不是 [ITask::GetId](../Task/GetId.md) 那种系统级任务 ID。
|
|
|
|
|
|
|
|
|
|
|
|
## 设计说明
|
|
|
|
|
|
|
|
|
|
|
|
把“组内任务 ID”和“系统任务 ID”分开,本来是合理设计。前者适合描述组内依赖,后者适合给全局调度器跟踪任务。
|
|
|
|
|
|
|
|
|
|
|
|
但当前实现只完成了最外层接口形状,还没有把这两套标识真正贯通起来。
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
|
|
|
|
|
## 相关文档
|
|
|
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
|
- [返回类型总览](TaskGroup.md)
|
|
|
|
|
|
- [AddDependency](AddDependency.md)
|
|
|
|
|
|
- [ITask](../Task/Task.md)
|
|
|
|
|
|
- [LambdaTask](../LambdaTask/LambdaTask.md)
|