#async #singleflight #tokio

async_singleflight

Async singleflight

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

#671 in Asynchronous

Download history 42/week @ 2024-03-11 15/week @ 2024-03-18 16/week @ 2024-03-25 45/week @ 2024-04-01 10/week @ 2024-04-08 9/week @ 2024-04-15 33/week @ 2024-04-22 6/week @ 2024-04-29 10/week @ 2024-05-13 18/week @ 2024-05-20 8/week @ 2024-05-27 17/week @ 2024-06-03 19/week @ 2024-06-10 26/week @ 2024-06-17 10/week @ 2024-06-24

72 downloads per month
Used in 2 crates

MIT/Apache

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–12MB
~112K SLoC