#timer #tokio #async-io

async-timers

Provides asynchronous timer primitives

4 releases

0.1.4 Aug 21, 2022
0.1.3 Aug 21, 2022
0.1.2 Aug 21, 2022
0.1.1 Aug 20, 2022
0.1.0 Aug 19, 2022

#1093 in Asynchronous

23 downloads per month

Unlicense

16KB
204 lines

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;
            }
        }
    }
}

Dependencies

~2.6–8MB
~62K SLoC