FlowBuilder类

FlowBuilder类是 Taskflow 框架中的一个核心组件,用于构建任务依赖图。它是 tf::Taskflow 和 tf::Subflow 的基类,提供了定义任务及其依赖关系的方法。----【基于AI】

以下是 FlowBuilder 类的详细说明:

类定义

class FlowBuilder
    目的: 构建任务依赖图。
    描述: 提供创建任务、定义依赖关系以及管理任务流结构的基本方法。

主要功能

1. 任务创建
   - 方法: emplace
   - 描述: 向任务依赖图中添加新任务。
   - 功能:
     - 接受一个可调用对象(如 lambda 表达式或函数指针),定义任务的执行逻辑。
     - 返回一个 `tf::Task` 对象,表示新创建的任务。
   - 示例:

     tf::Task A = flowBuilder.emplace([]() { std::cout << "任务 A\n"; });



2. 依赖管理
   - 方法: precede, succeed, broadcast, gather
   - 描述: 定义任务之间的依赖关系。
   - 功能:
     - precede: 确保一个任务在另一个任务之前运行。
     - succeed: 确保一个任务在另一个任务之后运行。
     - broadcast: 将一个任务连接到多个下游任务。
     - gather: 将多个上游任务连接到一个下游任务。
   - 示例:

     tf::Task A = flowBuilder.emplace([]() { std::cout << "A\n"; });
     tf::Task B = flowBuilder.emplace([]() { std::cout << "B\n"; });
     tf::Task C = flowBuilder.emplace([]() { std::cout << "C\n"; });

     A.precede(B, C);  // A 在 B 和 C 之前运行
     B.succeed(A);     // B 在 A 之后运行



     

3. 图结构管理
   - 方法: placeholder, name, num_dependents
   - 描述: 提供管理图结构的工具。
   - 功能:
     - placeholder: 创建一个没有关联逻辑的任务占位符,适用于动态任务创建。
     - name: 为任务分配名称,便于调试或日志记录。
     - num_dependents: 返回依赖于某个任务的任务数量。
   - 示例:
   

     tf::Task placeholderTask = flowBuilder.placeholder();
     placeholderTask.name("占位任务");


 

4. 可组合性
   - 方法: composed_of
   - 描述: 允许将一个任务流嵌入到另一个任务流中。
   - 功能:
     - 支持模块化设计,通过重用现有的任务流来构建更复杂的流程。
     - 适合构建分层的工作流。
   - 示例:

     tf::Taskflow subflow;
     subflow.emplace([]() { std::cout << "子任务\n"; });

     tf::Task composedTask = flowBuilder.composed_of(subflow);


 


 5. 条件执行
   - 方法: conditional
   - 描述: 支持任务图中的条件分支。
   - 功能:
     - 根据运行时条件执行不同的任务。
     - 适用于实现工作流中的决策逻辑。
   - 示例:

     tf::Task conditionTask = flowBuilder.emplace([](tf::Condition& cond) {
         if (some_condition) {
             cond.set_branch(0);  // 执行分支 0
         } else {
             cond.set_branch(1);  // 执行分支 1
         }
     });

     tf::Task branch0 = flowBuilder.emplace([]() { std::cout << "分支 0\n"; });
     tf::Task branch1 = flowBuilder.emplace([]() { std::cout << "分支 1\n"; });

     conditionTask.precede(branch0, branch1);


 

派生类

1. tf::Taskflow
- 描述: 继承自 FlowBuilder,提供额外的功能以执行和管理任务流。
- 新增功能:
  - run: 使用执行器运行任务流。
  - wait: 等待任务流完成。
  - dump: 可视化任务依赖图。

2. tf::Subflow
- 描述: 继承自 FlowBuilder,用于在父任务中创建动态任务流。
- 新增功能:
  - join: 将子任务流重新加入到父任务。
  - detach: 将子任务流分离,独立运行。
使用示例
 

#include <taskflow/taskflow.hpp>

int main() {
    tf::Executor executor;
    tf::Taskflow taskflow;

    // 创建任务
    tf::Task A = taskflow.emplace([]() { std::cout << "任务 A\n"; });
    tf::Task B = taskflow.emplace([]() { std::cout << "任务 B\n"; });
    tf::Task C = taskflow.emplace([]() { std::cout << "任务 C\n"; });

    // 定义依赖关系
    A.precede(B, C);

    // 执行任务流
    executor.run(taskflow).wait();

    return 0;
}

总结


FlowBuilder是 Taskflow 中用于构建任务依赖图的强大抽象类。它提供的方法可以轻松创建任务、定义依赖关系,并支持模块化和动态任务流的设计。通过继承 FlowBuilder,tf::Taskflow 和 tf::Subflow 实现了静态和动态工作流的统一接口,使其适用于各种复杂场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值