4 个版本

0.2.2 2022 年 3 月 3 日
0.2.1 2021 年 9 月 15 日
0.2.0 2021 年 4 月 2 日
0.1.0 2021 年 3 月 29 日

#491数据结构

Download history 145/week @ 2024-04-07 322/week @ 2024-04-14 246/week @ 2024-04-21 418/week @ 2024-04-28 224/week @ 2024-05-05 210/week @ 2024-05-12 373/week @ 2024-05-19 404/week @ 2024-05-26 396/week @ 2024-06-02 379/week @ 2024-06-09 390/week @ 2024-06-16 337/week @ 2024-06-23 254/week @ 2024-06-30 510/week @ 2024-07-07 303/week @ 2024-07-14 482/week @ 2024-07-21

1,562 每月下载量

MIT/Apache

23KB
477

task-group

一个用于管理 tokio 任务组的小型 crate。


let (task_group, task_manager): (TaskGroup<Error>, TaskManager<_>) = TaskGroup::new();

task_group.clone().spawn("a task", async move {
    task_group.spawn("b task", async move {
        /* all kinds of things */
        Ok(())
    }).await.expect("spawned b");
    Ok(())
}).await.expect("spawned a");

task_manager.await.expect("everyone successful");

TaskGroup 用于启动任务集合。集合有两个属性

  • 如果有任何任务返回错误或 panic,所有任务都将终止。
  • 如果由 TaskGroup::new 返回的 TaskManager 被丢弃,所有任务都将终止。

TaskManager 用于管理任务集合。您可以使用以下两种方式使用它

  • TaskManager 实现 Future,因此您可以对其进行轮询或等待。当所有任务返回 Ok(()) 并且相关的 TaskGroup 被丢弃(因此无法再创建更多任务)时,或者当任何任务 panic 或返回 Err(E) 时,它将准备好。
  • 当 TaskManager 被丢弃时,它包含的所有任务都将被取消(终止)。因此,如果您使用类似 tokio::time::timeout(duration, task_manager).await 的组合器,如果在超时发生时,所有任务都将被终止。

请参阅 examples/src/lib.rs 中的测试以获取更多示例。

依赖关系

~2–3MB
~47K SLoC