1.1 KiB
1.1 KiB
TaskGroup::Cancel
取消任务组中的未完成任务。
void Cancel();
行为说明
当前实现会:
- 加锁。
- 把
m_canceled设为true。 - 遍历
m_tasks。 - 对每个
task != nullptr且completed == false的节点调用task->OnCancel()。
返回值
- 无。
当前实现限制
- 当前不会把任务状态改成
TaskStatus::Canceled。 - 当前不会减少
m_pendingCount,因此也不会让 Wait / IsComplete 表现为“任务组结束了”。 - 当前不会通知条件变量。
- 当前不会释放任务对象。
OnCancel()是在任务组内部锁保护下调用的;如果回调里再次操作同一个TaskGroup,可能引入重入问题。
设计说明
真正可用的取消语义通常至少要覆盖三件事:
- 阻止尚未开始的任务继续进入执行。
- 让等待方得到确定的结束信号。
- 让任务对象生命周期仍然可控。
当前实现只覆盖了“通知任务自己被取消”这一层。