class
#include <taskflow/core/flow_builder.hpp>
Subflow class to construct a subflow graph from the execution of a dynamic task
tf::
The following example creates a taskflow graph that spawns a subflow from the execution of task B
, and the subflow contains three tasks, B1
, B2
, and B3
, where B3
runs after B1
and B2
.
// create three static tasks tf::Task A = taskflow.emplace([](){}).name("A"); tf::Task C = taskflow.emplace([](){}).name("C"); tf::Task D = taskflow.emplace([](){}).name("D"); // create a subflow graph (dynamic tasking) tf::Task B = taskflow.emplace([] (tf::Subflow& subflow) { tf::Task B1 = subflow.emplace([](){}).name("B1"); tf::Task B2 = subflow.emplace([](){}).name("B2"); tf::Task B3 = subflow.emplace([](){}).name("B3"); B1.precede(B3); B2.precede(B3); }).name("B"); A.precede(B); // B runs after A A.precede(C); // C runs after A B.precede(D); // D runs after B C.precede(D); // D runs after C
Base classes
- class FlowBuilder
- class to build a task dependency graph
Public functions
- void join()
- enables the subflow to join its parent task
- auto joinable() const -> bool noexcept
- queries if the subflow is joinable
- auto executor() -> Executor& noexcept
- acquires the associated executor
- auto graph() -> Graph&
- acquires the associated graph
- void retain(bool flag) noexcept
- specifies whether to keep the subflow after it is joined
- auto retain() const -> bool
- queries if the subflow will be retained after it is joined
Function documentation
void tf:: Subflow:: join()
enables the subflow to join its parent task
Performs an immediate action to join the subflow. Once the subflow is joined, it is considered finished and you may not modify the subflow anymore.
taskflow.emplace([](tf::Subflow& sf){ sf.emplace([](){}); sf.join(); // join the subflow of one task });
Only the worker that spawns this subflow can join it.
bool tf:: Subflow:: joinable() const noexcept
queries if the subflow is joinable
This member function queries if the subflow is joinable. When a subflow is joined, it becomes not joinable.
taskflow.emplace([](tf::Subflow& sf){ sf.emplace([](){}); std::cout << sf.joinable() << '\n'; // true sf.join(); std::cout << sf.joinable() << '\n'; // false });
void tf:: Subflow:: retain(bool flag) noexcept
specifies whether to keep the subflow after it is joined
Parameters | |
---|---|
flag | true to retain the subflow after it is joined; false to discard it |
By default, the runtime automatically clears a spawned subflow once it is joined. Setting this flag to true
allows the application to retain the subflow's structure for post-execution analysis like visualization.
bool tf:: Subflow:: retain() const
queries if the subflow will be retained after it is joined
Returns | true if the subflow will be retained after it is joined; false otherwise |
---|