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