#lazy-evaluation #once #static

async-oncecell

OnceCell和Lazy的异步版本

2个不稳定版本

0.2.0 2021年4月16日
0.1.0 2021年4月8日

#27 in #lazy

Download history 90/week @ 2024-03-11 150/week @ 2024-03-18 87/week @ 2024-03-25 124/week @ 2024-04-01 81/week @ 2024-04-08 140/week @ 2024-04-15 60/week @ 2024-04-22 62/week @ 2024-04-29 72/week @ 2024-05-06 54/week @ 2024-05-13 30/week @ 2024-05-20 57/week @ 2024-05-27 35/week @ 2024-06-03 24/week @ 2024-06-10 52/week @ 2024-06-17 22/week @ 2024-06-24

每月135次下载
用于jcargo

MIT/Apache

13KB
164

async-oncecell

Crates.io MIT or Apache 2.0 licensed Continuous integration

本库提供Rust的OnceCellLazy结构的异步版本,使用户可以在OnceCell和Lazy构造函数中使用async/await

该库应与任何稳定的异步运行时(如tokioasync-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