27个稳定版本 (6个主要版本)
7.6.1 | 2024年6月9日 |
---|---|
7.5.0 | 2024年3月11日 |
7.4.3 | 2023年9月22日 |
7.3.0 | 2023年6月23日 |
1.1.0 | 2021年10月19日 |
#18 in 异步
79,951 每月下载量
在 134 个crate中使用 (22个直接使用)
295KB
6.5K SLoC
futures-concurrency
异步Rust的结构化并发操作
高效的、可移植的异步Rust结构化并发操作。它与任何运行时都兼容,不删除生命周期,始终处理取消,并始终将输出返回给调用者。
futures-concurrency
为futures和streams两组提供并发操作。对于有界和无界futures和streams集合都适用。在这两种情况下,性能应与,如果不在常规执行器实现之上,则应相当。
示例
等待不同类型的多个futures
use futures_concurrency::prelude::*;
use std::future;
let a = future::ready(1u8);
let b = future::ready("hello");
let c = future::ready(3u16);
assert_eq!((a, b, c).join().await, (1, "hello", 3));
并行处理流中的项目
use futures_concurrency::prelude::*;
let v: Vec<_> = vec!["chashu", "nori"]
.into_co_stream()
.map(|msg| async move { format!("hello {msg}") })
.collect()
.await;
assert_eq!(v, &["hello chashu", "hello nori"]);
在futures的作用域之外访问堆栈数据
改编自 std::thread::scope
。
use futures_concurrency::prelude::*;
let mut container = vec![1, 2, 3];
let mut num = 0;
let a = async {
println!("hello from the first future");
dbg!(&container);
};
let b = async {
println!("hello from the second future");
num += container[0] + container[2];
};
println!("hello from the main future");
let _ = (a, b).join().await;
container.push(4);
assert_eq!(num, container.len());
安装
$ cargo add futures-concurrency
贡献
想要加入我们吗?请查看我们的 "贡献" 指南 并查看一些这些问题
许可
许可协议为 Apache License, Version 2.0 或 MIT license,任选其一。除非你明确表示,否则你提交给本crate的任何有意贡献,根据Apache-2.0许可协议定义,应双重许可如上所述,不附加任何额外条款或条件。
依赖
~2–26MB
~378K SLoC