Skip to main content

Module task_graph

Module task_graph 

Source
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§

TaskGraph
A directed acyclic graph of tasks with automatic parallel execution.

Type Aliases§

TaskGraphResult
Result type alias for task graph operations.