4个版本
0.1.3 | 2024年7月3日 |
---|---|
0.1.2 | 2024年7月3日 |
0.1.1 | 2022年3月11日 |
0.1.0 | 2022年3月11日 |
#374 在 异步
每月46次下载
用于 groupcache
15KB
302 行
Singleflight Async
Singleflight 以异步风格实现。
主要功能
- 同一时间只对相同的key执行一次异步任务。
- 任务被丢弃时安全取消。
- 不需要future是
Send
/Sync
,或'static
。 - 适用于所有类型的运行时,包括tokio、monoio或其他。
示例
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"
}));
}
let begin = std::time::Instant::now();
for fut in futures.into_iter() {
assert_eq!(fut.await, "my-result");
println!("task finished");
}
println!("time elapsed: {:?}", begin.elapsed());
}
输出将如下
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
time elapsed: 100.901321ms
依赖项
~2.4–8MB
~57K SLoC