2 releases

0.1.1 Mar 11, 2022
0.1.0 Mar 11, 2022

#1395 in Asynchronous

Download history 30/week @ 2023-12-10 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

446 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–9.5MB
~57K SLoC