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

1.1 KiB

TaskGroup::Cancel

取消任务组中的未完成任务。

void Cancel();

行为说明

当前实现会:

  1. 加锁。
  2. m_canceled 设为 true
  3. 遍历 m_tasks
  4. 对每个 task != nullptrcompleted == false 的节点调用 task->OnCancel()

返回值

  • 无。

当前实现限制

  • 当前不会把任务状态改成 TaskStatus::Canceled
  • 当前不会减少 m_pendingCount,因此也不会让 Wait / IsComplete 表现为“任务组结束了”。
  • 当前不会通知条件变量。
  • 当前不会释放任务对象。
  • OnCancel() 是在任务组内部锁保护下调用的;如果回调里再次操作同一个 TaskGroup,可能引入重入问题。

设计说明

真正可用的取消语义通常至少要覆盖三件事:

  • 阻止尚未开始的任务继续进入执行。
  • 让等待方得到确定的结束信号。
  • 让任务对象生命周期仍然可控。

当前实现只覆盖了“通知任务自己被取消”这一层。

相关文档