12 releases
0.5.2 | Nov 30, 2022 |
---|---|
0.5.1 | Nov 30, 2022 |
0.5.0 | Jun 30, 2022 |
0.4.0 | Oct 20, 2021 |
0.0.6 | Feb 16, 2021 |
#819 in Asynchronous
3,735 downloads per month
Used in 2 crates
14KB
319 lines
Async singleflight
Documentation: async_singleflight.
lib.rs
:
A singleflight implementation for tokio.
Inspired by singleflight.
Examples
use futures::future::join_all;
use std::sync::Arc;
use std::time::Duration;
use async_singleflight::Group;
const RES: usize = 7;
async fn expensive_fn() -> Result<usize, ()> {
tokio::time::sleep(Duration::new(1, 500)).await;
Ok(RES)
}
#[tokio::main]
async fn main() {
let g = Arc::new(Group::<_, ()>::new());
let mut handlers = Vec::new();
for _ in 0..10 {
let g = g.clone();
handlers.push(tokio::spawn(async move {
let res = g.work("key", expensive_fn()).await.0;
let r = res.unwrap();
println!("{}", r);
}));
}
join_all(handlers).await;
}
Dependencies
~5–11MB
~110K SLoC