57个版本 (37个稳定版)

2.3.4 2024年8月10日
2.3.3 2024年6月1日
2.3.2 2024年3月10日
2.2.2 2023年12月11日
0.1.0 2019年5月18日

100 in 异步

Download history 645335/week @ 2024-05-03 703844/week @ 2024-05-10 688232/week @ 2024-05-17 681766/week @ 2024-05-24 724351/week @ 2024-05-31 718962/week @ 2024-06-07 721964/week @ 2024-06-14 748127/week @ 2024-06-21 714647/week @ 2024-06-28 735833/week @ 2024-07-05 778013/week @ 2024-07-12 831165/week @ 2024-07-19 825933/week @ 2024-07-26 830655/week @ 2024-08-02 901482/week @ 2024-08-09 870256/week @ 2024-08-16

3,588,643 monthly downloads
用于 3,843 个Crates (212 直接使用)

Apache-2.0 OR MIT

145KB
2K SLoC

async-io

Build License Cargo Documentation

异步I/O和计时器。

此crate提供两个工具

  • Async,一个适配器,用于将标准网络类型(以及许多其他类型)用于异步程序。
  • Timer,一个在特定时间点到期的future。

有关在此crate之上构建的具体异步网络类型,请参阅async-net

实现

首次使用AsyncTimer时,将启动一个名为"async-io"的线程。此线程的目的是等待操作系统报告的I/O事件,然后在可以恢复时唤醒在I/O或计时器上阻塞的适当future。

为了等待下一个I/O事件,"async-io"线程使用Linux/Android/illumos上的epoll,macOS/iOS/BSD上的kqueue,illumos/Solaris上的事件端口,以及Windows上的IOCP。该功能由polling crate提供。

但是,请注意,您也可以使用block_on()函数在任何线程上处理I/O事件并唤醒future。因此,"async-io"线程只是一个备用机制,在没有任何其他线程处理I/O事件时处理I/O事件。

示例

连接到example.com:80,或者10秒后超时。

use async_io::{Async, Timer};
use futures_lite::{future::FutureExt, io};

use std::net::{TcpStream, ToSocketAddrs};
use std::time::Duration;

let addr = "example.com:80".to_socket_addrs()?.next().unwrap();

let stream = Async::<TcpStream>::connect(addr).or(async {
    Timer::after(Duration::from_secs(10)).await;
    Err(io::ErrorKind::TimedOut.into())
})
.await?;

许可

根据以下任一许可

由您选择。

贡献

除非您明确声明,否则您根据Apache-2.0许可证定义提交给作品以供包含的任何贡献,将按照上述方式双重授权,无需附加条款或条件。

依赖关系

~3–13MB
~160K SLoC