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 异步
3,588,643 monthly downloads
用于 3,843 个Crates (212 直接使用)
145KB
2K SLoC
async-io
异步I/O和计时器。
此crate提供两个工具
Async
,一个适配器,用于将标准网络类型(以及许多其他类型)用于异步程序。Timer
,一个在特定时间点到期的future。
有关在此crate之上构建的具体异步网络类型,请参阅async-net
。
实现
首次使用Async
或Timer
时,将启动一个名为"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(LICENSE-APACHE 或 http://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则您根据Apache-2.0许可证定义提交给作品以供包含的任何贡献,将按照上述方式双重授权,无需附加条款或条件。
依赖关系
~3–13MB
~160K SLoC