Runtime agnostic way of waiting for async tasks.
- Done: Support for golang's
WaitGroup.Add&WaitGroup.Done - Done: Support for RAII based
done()ing the task i.e. callingdone()on drop. - Done: Mixing of both
add,doneand RAII semantics. - Done: Reuse the same taskgroup for multiple checkpoints.
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;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;