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

adirector

有限大小的异步 tokio 任务孵化器

2 个版本

0.1.1 2024年3月9日
0.1.0 2024年3月9日

#738并发

自定义许可协议

15KB

adirector

License Cargo Documentation

有限大小的异步 tokio 任务孵化器。

完整示例

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
}

实现

使用 Semaphore 来限制任务的数量,并使用 JoinSet 来一次性连接所有任务。

依赖关系

  • tokio,带有 rt sync 功能

依赖关系

~2.3–4MB
~63K SLoC