1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
use async_io::Timer; use futures_lite::future; use std::future::Future; use std::io; use std::time::Duration; pub async fn io_timeout<T>( dur: Duration, f: impl Future<Output = io::Result<T>>, ) -> io::Result<T> { future::race(f, async move { Timer::after(dur).await; Err(io::ErrorKind::TimedOut.into()) }) .await }