7 个版本

0.99.1 2020年3月9日
0.99.0 2020年2月16日
0.2.2 2019年11月26日
0.1.1 2019年11月3日

异步 类别中排名第 150

Download history 17659/week @ 2024-03-14 17995/week @ 2024-03-21 15807/week @ 2024-03-28 19284/week @ 2024-04-04 17639/week @ 2024-04-11 20913/week @ 2024-04-18 19191/week @ 2024-04-25 15745/week @ 2024-05-02 19739/week @ 2024-05-09 21170/week @ 2024-05-16 16867/week @ 2024-05-23 17908/week @ 2024-05-30 16176/week @ 2024-06-06 17954/week @ 2024-06-13 15579/week @ 2024-06-20 14207/week @ 2024-06-27

每月下载量 68,027
85 个 crate(42 个直接使用)中使用

MIT 许可协议

100KB
1.5K SLoC

genawaiter

crate-badge docs-badge ci-badge

该 crate 在稳定 Rust 中实现了无栈生成器(也称为协程)。与使用 yield(该特性在不久的将来不会稳定)不同,您现在使用的是稳定的 async/await

功能

  • 支持恢复参数和完成值
  • 支持异步生成器(例如,Stream
  • 无内存分配
  • 无运行时依赖
    • 无编译时依赖,使用 default-features = false
  • 基于标准语言构造,这意味着没有平台特定的技巧

示例

let odd_numbers_less_than_ten = gen!({
    let mut n = 1;
    while n < 10 {
        yield_!(n); // Suspend a function at any point with a value.
        n += 2;
    }
});

// Generators can be used as ordinary iterators.
for num in odd_numbers_less_than_ten {
    println!("{}", num);
}

结果

1
3
5
7
9

以下是同一个生成器,这次没有使用宏。这就是使用 default-features = false(这消除了 proc macro 依赖)的方法。

let odd_numbers_less_than_ten = Gen::new(|co| async move {
    let mut n = 1;
    while n < 10 {
        co.yield_(n).await;
        n += 2;
    }
});

请参阅文档以获取更多信息。

依赖

~235KB