#tasks #collection #group #waiting #spawner #tokio #spawned

no-std task-collection

用于管理和等待任务组的类型

4个版本

0.0.4 2022年4月6日
0.0.3 2020年12月15日
0.0.2 2020年12月14日
0.0.1 2020年12月14日

#1012 in 数据结构

MIT/Apache

11KB
243 代码行

用于启动和等待任务组的类型。

此crate提供TaskCollection,用于分组启动的任务。TaskCollection类型是通过Spawner实现创建的。通过TaskCollections的spawn方法启动的任务将以最小的开销进行跟踪。《code>await TaskCollection将等待直到该集合中启动的所有任务都完成。

以下示例显示了如何使用TaskCollection等待启动的任务完成


fn main() {
    let runtime = tokio::runtime::Runtime::new().unwrap();
    let (tx, mut rx) = mpsc::unbounded::<u64>();
    
    runtime.spawn(async move {
        (0..10).for_each(|v| {
            tx.unbounded_send(v).expect("Failed to send");
        })
    });
    
    runtime.block_on(async {
        let collection = TaskCollection::new(&runtime);
        while let Some(val) = rx.next().await {
            collection.spawn(async move {
                // Simulate some async work
                tokio::time::sleep(Duration::from_secs(val)).await;
                println!("Value {}", val);
            });
        }

        collection.await;
        println!("All values printed");
    });
}

依赖项

~0.5–14MB
~136K SLoC