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