#futures #queue #task

futures-dagtask

DAG-based Task Queue

3 releases (breaking)

0.3.0 Nov 30, 2019
0.2.0 Jan 13, 2019
0.1.0 Jan 11, 2019

MIT license

12KB
314 lines

futures-dagtask

A task queue based on a directed acyclic graph that allows you to specify dependencies for concurrent tasks.

Usage

use futures::future;
use futures_dagtask::TaskGraph;

let mut graph = TaskGraph::new();
let zero = graph.add_task(&[], future::ready::<u32>(0))?;
let one = graph.add_task(&[], future::ready::<u32>(1))?;
let two = graph.add_task(&[one], future::ready::<u32>(2))?;

let (add, exec) = graph.execute();

// spawn(exec.for_each(drop));

let _three = add.add_task(&[two], future::ready(3)).await?;

In this example, zero and one will be executed concurrently, but two will be executed after one is completed.

Due to the simplicity of design, we will never have circular dependencies.

License

This project is licensed under the MIT license.

Dependencies

~1MB
~19K SLoC