async-timers

Crates.ioasync-timers
lib.rsasync-timers
version0.1.4
sourcesrc
created_at2022-08-19 15:06:57.802238
updated_at2022-08-21 17:42:39.505158
descriptionProvides asynchronous timer primitives
homepagehttps://github.com/Blyschak/async-timers
repositoryhttps://github.com/Blyschak/async-timers
max_upload_size
id648751
size24,911
Stepan Blyshchak (Blyschak)

documentation

README

Async Timers

Crates.io Unlicensed Documentation Build Status codecov LoC

This crate provides PeriodicTimer and OneshotTimer to be used in async context (tokio).

Usage

Example

use async_timers::{OneshotTimer, PeriodicTimer};
use tokio::time::Duration;

#[tokio::main]
async fn main() {
    let mut start_delay = OneshotTimer::expired();
    let mut stop_delay = OneshotTimer::expired();
    let mut periodic = PeriodicTimer::stopped();

    let mut exit_loop_delay = OneshotTimer::scheduled(Duration::from_secs(10));

    // The following call will block forever
    // start_delay.tick().await;

    // Useful in event loop in select! blocks

    start_delay.schedule(Duration::from_secs(2));
    println!("Periodic timer will start in 2 sec");

    loop {
        tokio::select! {
            _ = start_delay.tick() => {
                // Start periodic timer with period of 500 ms
                periodic.start(Duration::from_millis(500));

                stop_delay.schedule(Duration::from_secs(3));
                println!("Periodic timer will stop in 3 sec");
            }
            _ = stop_delay.tick() => {
                // Stop periodic timer
                periodic.stop();
                exit_loop_delay.schedule(Duration::from_secs(3));
                println!("Periodic timer stopped. Will exit in 3 sec");
            }
            _ = periodic.tick() => {
                println!("Periodic tick!");
            }
            _ = exit_loop_delay.tick() => {
                println!("Bye!");
                break;
            }
        }
    }
}
Commit count: 25

cargo fmt