#async-std #async-task #task #async #spawn #future

async-task-group

将 `async-std` 任务组作为一个单一单元进行管理

1 个不稳定版本

0.2.1 2021年10月25日

#2131异步

MIT/Apache

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.0MIT 许可证
除非您明确声明,否则您故意提交以包含在此 crate 中的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,不附加任何其他条款或条件。

依赖项

~5–14MB
~168K SLoC