#并发 #未来 #异步 # #结构化 #操作 #多重

无std futures-concurrency

异步Rust的结构化并发操作

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 异步

Download history 20715/week @ 2024-05-04 24605/week @ 2024-05-11 25161/week @ 2024-05-18 25223/week @ 2024-05-25 28683/week @ 2024-06-01 22155/week @ 2024-06-08 24673/week @ 2024-06-15 27515/week @ 2024-06-22 23561/week @ 2024-06-29 18877/week @ 2024-07-06 17279/week @ 2024-07-13 20700/week @ 2024-07-20 20235/week @ 2024-07-27 18151/week @ 2024-08-03 19979/week @ 2024-08-10 17561/week @ 2024-08-17

79,951 每月下载量
134 个crate中使用 (22个直接使用)

MIT/Apache

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.0MIT license,任选其一。
除非你明确表示,否则你提交给本crate的任何有意贡献,根据Apache-2.0许可协议定义,应双重许可如上所述,不附加任何额外条款或条件。

依赖

~2–26MB
~378K SLoC