#async-task #tasks #wait #wait-group #async #async-await #await

taskwait

以运行时无关的方式等待一组异步任务

7个不稳定版本 (3个破坏性变更)

0.4.1 2021年3月19日
0.4.0 2021年3月17日
0.3.1 2021年3月14日
0.2.1 2021年3月13日
0.1.0 2021年3月13日

#1752异步

MIT 许可证

14KB
227

Crates.io docs.rs Build

taskwait

以运行时无关的方式等待异步任务。

功能

  • 完成:支持golang的WaitGroup.AddWaitGroup.Done
  • 完成:支持基于RAII的done()任务,即在drop时调用done()
  • 完成:混合了adddone和RAII语义。
  • 完成:重复使用相同的taskgroup进行多个检查点。

示例

使用add & done

use taskwait::TaskGroup;
 
let tg = TaskGroup::();
for _ in 0..10 {
    tg.add();
    let tg_c = tg.clone();
    tokio::spawn(async move{
        ...
        tg_c.done();
    })
}
tg.wait().await;

使用add & add_work

use taskwait::TaskGroup;
 
let tg = TaskGroup::();
for _ in 0..10 {
    let work = tg.add_work(1); // Increment counter
    tokio::spawn(async move{
        let _work = work; // done() will be called when this is dropped
        ...
    })
}
tg.wait().await;

依赖项

~715KB
~14K SLoC