2026-03-26 16:45:24 +08:00
|
|
|
# TaskGroup::Wait
|
|
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
阻塞当前线程,等待任务组完成。
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
|
|
|
```cpp
|
|
|
|
|
void Wait();
|
|
|
|
|
```
|
|
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
## 行为说明
|
2026-03-26 16:45:24 +08:00
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
当前实现会等待条件变量,直到谓词 `m_pendingCount.load() == 0` 为真。
|
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
|
|
|
## 当前实现限制
|
2026-03-26 16:45:24 +08:00
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
- 当前源码里 `m_pendingCount` 会在 [AddTask](AddTask.md) 时递增,但没有任何代码路径会把它递减。
|
|
|
|
|
- 这意味着只要任务组里添加过任务,`Wait()` 当前就不会因为正常任务完成而返回。
|
|
|
|
|
- [Cancel](Cancel.md) 也不会通知条件变量,因此取消并不能唤醒这里的等待。
|
|
|
|
|
|
|
|
|
|
## 使用建议
|
|
|
|
|
|
|
|
|
|
- 当前不要在生产代码中依赖这个接口实现真正的任务组同步。
|
|
|
|
|
- 如果你需要可靠同步,优先直接使用 [Thread::Join](../Thread/Join.md) 或更低层的锁/条件变量方案。
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
|
|
|
## 相关文档
|
|
|
|
|
|
2026-03-26 20:59:59 +08:00
|
|
|
- [返回类型总览](TaskGroup.md)
|
|
|
|
|
- [WaitFor](WaitFor.md)
|
|
|
|
|
- [IsComplete](IsComplete.md)
|