taskwait
Runtime agnostic way of waiting for async tasks.
Features
- 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
,done
and RAII semantics. - Done: Reuse the same taskgroup for multiple checkpoints.
Example
Using 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;
Using RAII with 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;