tokio_interval

Crates.iotokio_interval
lib.rstokio_interval
version0.1.4
sourcesrc
created_at2023-02-21 12:20:42.736763
updated_at2023-02-21 14:58:20.659933
description基于Tokio实现了 setInterval(callback, ms) 和 setTimeout(callback, ms) 类似于Javascript的API.
homepagehttps://github.com/jafshare/tokio-interval
repositoryhttps://github.com/jafshare/tokio-interval
max_upload_size
id790659
size26,869
Hunter (jafshare)

documentation

https://docs.rs/tokio_interval

README

Tokio-Interval

基于 tokio 实现了类似于 jssetIntervalsetTimeout 的功能

目前提供了以下几个宏:

  • set_interval!(cb, ms) 创建一个定时器,支持传入一个闭包
  • set_interval_async!(|| future, ms) 创建一个定时器,支持传入一个返回 future 回调
  • set_timeout!(cb, ms) 创建一个延时器,支持传入一个闭包
  • set_timeout_async!(future, ms) 创建一个延时器,支持传入一个 future
  • clear_timer!(timer_id) 清除定时器
  • clear_all_timer!() 清除由 tokio_interval 创建的所有定时器,包含 set_interval!、set_timeout!、set_interval_async!、set_timeout_async!

注意:

  • 由于实现的逻辑,set_interval 受传入的 fn 运行时耗的影响,ms 不是一个固定的间隔

使用方法

Cargo.toml

[dependencies]
tokio_interval = "<latest-version>"

main.rs

use tokio::time::{sleep,Duration};
use tokio_interval::{set_interval, set_timeout, clear_timer};

#[tokio::main]
async fn main() {
    set_timeout!(|| println!("timeout"), 500);
    set_interval!(|| println!("interval"), 500);
    // 保存id,以便手动删除
    let id = set_interval!(|| println!("clear_interval"), 500);
    sleep(Duration::from_millis(600)).await;
    // 删除定时器
    clear_interval(id);
    // 保证定时器可以继续执行
    sleep(Duration::from_millis(1200)).await;
}
Commit count: 13

cargo fmt