#task #tokio-task #join #parallel #performance #async-executor

adirector

asynchronous tokio task spawner with a limited size

2 releases

0.1.1 Mar 9, 2024
0.1.0 Mar 9, 2024

#1083 in Concurrency

Custom license

15KB

adirector

License Cargo Documentation

asynchronous tokio task spawner with a limited size.

Full example:

use adirector::{Director, DirectorError};

#[tokio: main]
async fn main() -> Result<(), DirectorError> {
    // create executor that allow 10 tasks concurrently.
    let mut director = Director::new(10);

    // read line by line stdin
    let mut lines = BufReader::new(stdin()).lines();
    while let Some(line) = lines.next_line().await.unwrap() {
        director.spawn(async move {
            println!("{}", line);
            sleep(Duration::from_millis(50)).await;
        }).await?; // Suspends until the task is spawned
    }

    // Wait for remaining tasks to complete
    director.join_all().await
}

Implementation

A Semaphore is used to limit the count of tasks, and a JoinSet to join all tasks at once.

Dependencies

  • tokio with rt sync features

Dependencies

~2.2–8MB
~63K SLoC