2 releases

0.1.1 Mar 11, 2022
0.1.0 Mar 11, 2022

#1574 in Asynchronous

Download history 20/week @ 2024-01-14 45/week @ 2024-01-21 3/week @ 2024-01-28 68/week @ 2024-02-04 7/week @ 2024-02-11 80/week @ 2024-02-18 258/week @ 2024-02-25 115/week @ 2024-03-03 58/week @ 2024-03-10 8/week @ 2024-03-17 28/week @ 2024-03-24 52/week @ 2024-03-31 1/week @ 2024-04-07 19/week @ 2024-04-14 118/week @ 2024-04-21

191 downloads per month
Used in groupcache

MIT/Apache

13KB
263 lines

Singleflight Async

Crates.io MIT/Apache-2 licensed

Singleflight in async style.

Example

use singleflight_async::SingleFlight;

#[tokio::main]
async fn main() {
    let group = SingleFlight::new();
    let mut futures = Vec::new();
    for _ in 0..10 {
        futures.push(group.work("key", || async {
            println!("will sleep to simulate async task");
            tokio::time::sleep(std::time::Duration::from_millis(100)).await;
            println!("real task done");
            "my-result"
        }));
    }

    for fut in futures.into_iter() {
        assert_eq!(fut.await, "my-result");
        println!("task finished");
    }
}

The output will be like:

will sleep to simulate async task
real task done
task finished
task finished
task finished
task finished
task finished
task finished
task finished
task finished
task finished
task finished

Dependencies

~2.4–9MB
~57K SLoC