1 个不稳定版本
0.2.1 | 2021年10月25日 |
---|
#2131 在 异步
18KB
208 代码行
async-task-group
将 `async-std` 任务组作为一个单一单元进行管理。
致谢
此代码库基于 Pat Hickey 的 task-group
项目。
示例
创建一个回显 TCP 服务器,该服务器在循环中处理传入连接,而不会创建任何悬空任务
use async_std::io;
use async_std::net::{TcpListener, TcpStream};
use async_std::prelude::*;
use async_std::task;
async fn process(stream: TcpStream) -> io::Result<()> {
println!("Accepted from: {}", stream.peer_addr()?);
let mut reader = stream.clone();
let mut writer = stream;
io::copy(&mut reader, &mut writer).await?;
Ok(())
}
#[async_std::main]
async fn main() -> io::Result<()> {
let listener = TcpListener::bind("127.0.0.1:8080").await?;
println!("Listening on {}", listener.local_addr()?);
let handle = async_task_group::group(|group| async move {
let mut incoming = listener.incoming();
while let Some(stream) = incoming.next().await {
let stream = stream?;
group.spawn(async move { process(stream).await });
}
Ok(group)
});
handle.await?;
Ok(())
}
安装
$ cargo add async-task-group
安全性
此 crate 使用 #![deny(unsafe_code)]
确保所有内容都在 100% 安全的 Rust 中实现。
贡献
想要加入我们吗?查看我们的 "贡献" 指南 并查看一些这些问题
许可证
根据您的选择,许可为 Apache 许可证,版本 2.0 或 MIT 许可证。除非您明确声明,否则您故意提交以包含在此 crate 中的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,不附加任何其他条款或条件。
依赖项
~5–14MB
~168K SLoC