2个不稳定版本
0.2.0 | 2021年4月16日 |
---|---|
0.1.0 | 2021年4月8日 |
#27 in #lazy
每月135次下载
用于jcargo
13KB
164 行
async-oncecell
本库提供Rust的OnceCell
和Lazy
结构的异步版本,使用户可以在OnceCell和Lazy构造函数中使用async
/await
。
该库应与任何稳定的异步运行时(如tokio
和async-std
)兼容,并且仅依赖于futures
crate来实现异步感知的Mutex
。
用法
OnceCell
的使用方式与其他流行的OnceCell crate相似,实现方式与标准库中相同,只是将闭包改为Future,并且某些函数返回Future。
示例
use async_oncecell::OnceCell;
#[tokio::main]
async fn main() {
let cell = OnceCell::new();
let v = cell.get_or_init(async {
// Expensive operation
}).await;
assert_eq!(cell.get(), Some(v));
}
对于Lazy
也是如此,但由于需要等待get
方法,没有实现自动解引用。
示例
use async_oncecell::Lazy;
#[tokio::main]
async fn main() {
let lazy_value = Lazy::new(async {
// Expensive operation
});
assert_eq!(lazy_value.get().await, /* result of expensive operation */);
}
稳定性
这个库非常新,因此还没有经过充分的测试。此外,作者在处理unsafe
Rust方面也没有经验。尽管已经尽力使这个库安全,但仍然不建议在生产中使用。如贡献部分所述:欢迎反馈和拉取请求,尤其是如果您发现任何关于库稳定性的问题。
贡献
欢迎贡献!如果您有任何可能帮助改进这个库的见解,请创建一个问题或拉取请求。这是我的第一个真正的Rust crate,因此我渴望从社区中学习。
愿望清单
未来我希望添加异步转换结构,以便能够懒性地转换数据。
依赖关系
~1MB
~16K SLoC