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 在 数据结构
1,562 每月下载量
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