5个版本
0.1.4 | 2022年2月25日 |
---|---|
0.1.3 | 2021年3月27日 |
0.1.2 | 2020年12月24日 |
0.1.1 | 2020年12月12日 |
0.1.0 | 2020年12月12日 |
#1878 在 异步
用于 safina
60KB
1.5K SLoC
safeina-select
这是一个Rust库,用于等待多个futures并获取第一个完成的结果。
它是安全异步运行时 safina
的一部分。
功能
禁止(不安全代码)
- 仅依赖于
std
- 良好的测试覆盖率(96%)
- 与
safina-executor
或任何异步执行器兼容
限制
- 可以等待2-5个futures。如果需要更多,可以嵌套使用。
示例
use safina_async_test::async_test;
use safina_select::{select_ab, OptionAb};
let conn = match select_ab(make_new(addr.clone()), get_from_pool(addr.clone())).await {
OptionAb::A(result) => result?,
OptionAb::B(result) => result?,
};
// When both futures return the same type, you can use `take`:
let conn = select_ab(make_new(addr.clone()), get_from_pool(addr.clone())).await.take()?;
use safina_async_test::async_test;
use safina_select::{select_ab, OptionAb};
safina_timer::start_timer_thread();
let data = match select_ab(read_data(), safina_timer::sleep_until(deadline)).await {
OptionAb::A(result) => Ok(result?),
OptionAb::B(()) => Err("timeout"),
};
文档
待办事项 - 替代方案
tokio::select
- 非常流行
- 速度快
- 内部非常复杂
- 充满
不安全
代码
futures::select
- 非常流行
- proc宏,非常复杂
- 包含少量
不安全
代码
变更日志
- V0.1.4 - 更新文档。
- v0.1.3 - 将
OptionAB
重命名为OptionAb
等。 - v0.1.2 - 满足pedantic clippy
- v0.1.1 - 添加到readme中的徽章。将
safina
包重命名为safina-executor
。 - v0.1.0 - 首次发布版本
待办事项
发布流程
- 编辑
Cargo.toml
并增加版本号。 - 运行
./release.sh
许可证: Apache-2.0