Expand description
DAG-based task graph executor
This module provides a directed acyclic graph (DAG) based task dependency graph with automatic parallelism. Tasks are added with named dependencies, and execution proceeds in topological order with maximal concurrency.
§Features
- Automatic parallelism: Independent tasks run concurrently
- Cycle detection: Adding a task that would create a cycle is rejected
- Topological ordering: Tasks execute in valid dependency order
- Result collection: Each task produces a result accessible by name
- Error propagation: Failures in dependencies prevent dependent tasks from executing
§Example
use scirs2_core::distributed::task_graph::TaskGraph;
let mut graph = TaskGraph::<i32>::new();
graph.add_task("load_data", &[], |_results| Ok(42)).expect("add failed");
graph.add_task("process", &["load_data"], |results| {
let data = results.get("load_data").copied().unwrap_or(0);
Ok(data * 2)
}).expect("add failed");
graph.add_task("save", &["process"], |results| {
let processed = results.get("process").copied().unwrap_or(0);
Ok(processed + 1)
}).expect("add failed");
let results = graph.execute().expect("execution failed");
assert_eq!(results.get("load_data"), Some(&42));
assert_eq!(results.get("process"), Some(&84));
assert_eq!(results.get("save"), Some(&85));Structs§
- Task
Graph - A directed acyclic graph of tasks with automatic parallel execution.
Type Aliases§
- Task
Graph Result - Result type alias for task graph operations.