1 个稳定版本
1.0.0 | 2023 年 9 月 24 日 |
---|---|
0.1.1 |
|
0.1.0 |
|
#825 in 异步
57KB
1K SLoC
spawn_groups
简介
一个结构化并发构造,提供了一种创建和运行任意数量子任务的方法,可以在每个子任务执行完毕后立即等待其结果,取消所有正在运行中的子任务或等待所有子任务执行完毕。这受到了 Swift 语言中的 TaskGroup
的强烈影响。
安装
添加到您的代码中
$ cargo add spawn_groups
示例
use async_std::io::{self};
use async_std::net::{TcpListener, TcpStream};
use async_std::prelude::*;
use spawn_groups::{with_err_spawn_group, GetType, Priority};
async fn process(stream: TcpStream) -> io::Result<()> {
println!("Accepted from local: {}", stream.local_addr()?);
println!("Accepted from: {}", stream.peer_addr()?);
let mut reader = stream.clone();
let mut writer = stream;
io::copy(&mut reader, &mut writer).await?;
Ok(())
}
type Void = ();
#[async_std::main]
async fn main() -> io::Result<()> {
let listener = TcpListener::bind("127.0.0.1:8080").await?;
println!("Listening on {}", listener.local_addr()?);
with_err_spawn_group(Void::TYPE, io::Error::TYPE, |mut group| async move {
let mut incoming = listener.incoming();
while let Some(stream) = incoming.next().await {
let Ok(stream) = stream else {
return Err(stream.expect_err("Expected an error"));
};
group.spawn_task(Priority::default(), async move { process(stream).await });
}
Ok(())
})
.await?;
Ok(())
}
文档
有关此 rust crate 的更好文档,请访问 此处
依赖项
~1.1–7MB
~38K SLoC