Files
XCEngine/docs/api/XCEngine/Threading/TaskGroup/Cancel.md

45 lines
1.1 KiB
Markdown
Raw Normal View History

2026-03-26 16:45:24 +08:00
# TaskGroup::Cancel
2026-03-26 20:59:59 +08:00
取消任务组中的未完成任务。
2026-03-26 16:45:24 +08:00
```cpp
void Cancel();
```
2026-03-26 20:59:59 +08:00
## 行为说明
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
1. 加锁。
2.`m_canceled` 设为 `true`
3. 遍历 `m_tasks`
4. 对每个 `task != nullptr``completed == false` 的节点调用 `task->OnCancel()`
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
- 无。
2026-03-26 16:45:24 +08:00
2026-03-26 20:59:59 +08:00
## 当前实现限制
- 当前不会把任务状态改成 `TaskStatus::Canceled`
- 当前不会减少 `m_pendingCount`,因此也不会让 [Wait](Wait.md) / [IsComplete](IsComplete.md) 表现为“任务组结束了”。
- 当前不会通知条件变量。
- 当前不会释放任务对象。
- `OnCancel()` 是在任务组内部锁保护下调用的;如果回调里再次操作同一个 `TaskGroup`,可能引入重入问题。
## 设计说明
真正可用的取消语义通常至少要覆盖三件事:
- 阻止尚未开始的任务继续进入执行。
- 让等待方得到确定的结束信号。
- 让任务对象生命周期仍然可控。
当前实现只覆盖了“通知任务自己被取消”这一层。
2026-03-26 16:45:24 +08:00
## 相关文档
2026-03-26 20:59:59 +08:00
- [返回类型总览](TaskGroup.md)
- [Wait](Wait.md)
- [ITask::OnCancel](../Task/OnCancel.md)