#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

#530 in Asynchronous

Download history 10/week @ 2023-11-26 2/week @ 2023-12-03 4/week @ 2024-01-07 8/week @ 2024-01-28 98/week @ 2024-02-04 1/week @ 2024-02-11 51/week @ 2024-02-18 17/week @ 2024-02-25 14/week @ 2024-03-03 34/week @ 2024-03-10

116 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–13MB
~111K SLoC