91 lines
2.2 KiB
Markdown
91 lines
2.2 KiB
Markdown
|
|
# TaskGroup::AddDependency
|
|||
|
|
|
|||
|
|
```cpp
|
|||
|
|
void AddDependency(uint64_t taskId, uint64_t dependsOn);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
为任务添加依赖关系。指定的任务 `taskId` 将在 `dependsOn` 任务完成后才会开始执行。
|
|||
|
|
|
|||
|
|
**参数:**
|
|||
|
|
- `taskId` - 从属任务的 ID
|
|||
|
|
- `dependsOn` - 被依赖任务的 ID,taskId 将在此任务完成后才执行
|
|||
|
|
|
|||
|
|
**返回:** 无
|
|||
|
|
|
|||
|
|
**线程安全:** ✅ 线程安全
|
|||
|
|
|
|||
|
|
**示例:**
|
|||
|
|
|
|||
|
|
```cpp
|
|||
|
|
#include "XCEngine/Threading/TaskGroup.h"
|
|||
|
|
#include "XCEngine/Threading/Task.h"
|
|||
|
|
#include <iostream>
|
|||
|
|
#include <memory>
|
|||
|
|
|
|||
|
|
using namespace XCEngine::Threading;
|
|||
|
|
|
|||
|
|
int main() {
|
|||
|
|
TaskGroup group;
|
|||
|
|
|
|||
|
|
uint64_t loadData = group.AddTask(
|
|||
|
|
[]() { std::cout << "Loading data...\n"; },
|
|||
|
|
TaskPriority::High
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
uint64_t processData = group.AddTask(
|
|||
|
|
[]() { std::cout << "Processing data...\n"; },
|
|||
|
|
TaskPriority::Normal
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
uint64_t saveData = group.AddTask(
|
|||
|
|
[]() { std::cout << "Saving data...\n"; },
|
|||
|
|
TaskPriority::Low
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
group.AddDependency(processData, loadData);
|
|||
|
|
group.AddDependency(saveData, processData);
|
|||
|
|
|
|||
|
|
std::cout << "Execution order: loadData -> processData -> saveData\n";
|
|||
|
|
|
|||
|
|
group.Wait();
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 相关文档
|
|||
|
|
|
|||
|
|
- [TaskGroup 总览](task-group.md) - 返回类总览
|
|||
|
|
|
|||
|
|
## 详细描述
|
|||
|
|
|
|||
|
|
`AddDependency` 方法用于设置任务间的依赖关系。`taskId` 指定的任务将等待 `dependsOn` 指定的任务完成后才能开始执行。
|
|||
|
|
|
|||
|
|
依赖关系必须在任务执行前设置,建议在所有任务添加完成后统一设置依赖。
|
|||
|
|
|
|||
|
|
## 参数
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 描述 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `taskId` | `uint64_t` | 依赖其他任务的任务ID |
|
|||
|
|
| `dependsOn` | `uint64_t` | 被依赖的任务ID |
|
|||
|
|
|
|||
|
|
## 返回值
|
|||
|
|
|
|||
|
|
无
|
|||
|
|
|
|||
|
|
## 示例
|
|||
|
|
|
|||
|
|
```cpp
|
|||
|
|
TaskGroup* group = TaskSystem::Get().CreateTaskGroup();
|
|||
|
|
|
|||
|
|
uint64_t loadData = group->AddTask([]() { /* 加载数据 */ });
|
|||
|
|
uint64_t processData = group->AddTask([]() { /* 处理数据 */ });
|
|||
|
|
uint64_t saveData = group->AddTask([]() { /* 保存数据 */ });
|
|||
|
|
|
|||
|
|
// processData必须在loadData完成后才能执行
|
|||
|
|
group->AddDependency(processData, loadData);
|
|||
|
|
|
|||
|
|
// saveData必须在processData完成后才能执行
|
|||
|
|
group->AddDependency(saveData, processData);
|
|||
|
|
```
|