| Crates.io | async-timeouts |
| lib.rs | async-timeouts |
| version | 0.3.2 |
| created_at | 2025-04-08 18:56:12.644384+00 |
| updated_at | 2025-04-16 10:33:11.340673+00 |
| description | An instrument to start async tasks after timeouts |
| homepage | |
| repository | https://altlinux.space/writers/async-timeouts |
| max_upload_size | |
| id | 1625824 |
| size | 29,296 |
It is a simple instrument to delay execution of an async task with additional methods:
It is convinient to use this crate with Notify or different channels (i.e. async_channel).
Basic example
use std::time::{Duration, Instant};
use async_timeouts::Timeout;
use tokio::sync::Notify;
use std::sync::Arc;
#[tokio::main]
async fn main() {
let event = Arc::new(Notify::new());
let timer = Instant::now();
{
let event = event.clone();
// Let's notify our event after 3 seconds
Timeout::set(Duration::from_secs(3), async move {
event.notify_one();
}).await;
}
event.notified().await;
assert!(timer.elapsed().as_secs() >= 3);
println!("{} seconds elapsed", timer.elapsed().as_secs());
}
If you do not need to start timer when Timeout is created, use Timeout::default() with
a subsequent call to the restart method
use std::time::Duration;
use async_timeouts::Timeout;
#[tokio::main]
async fn main() {
let mut task = Timeout::default();
println!("Task timer is not running yet: {}", task.finished());
assert!(task.finished());
task.restart(Duration::from_secs(3), async move {
// Some task here
tokio::time::sleep(Duration::from_secs(1)).await;
}).await;
println!("Task timer is running: {}", !task.finished());
assert!(!task.finished());
task.stop().await;
println!("Task timer is stoped: {}", task.finished());
assert!(task.finished());
}
Take a look at more complex examples: