Crates.io | tokio_interval |
lib.rs | tokio_interval |
version | 0.1.4 |
source | src |
created_at | 2023-02-21 12:20:42.736763 |
updated_at | 2023-02-21 14:58:20.659933 |
description | 基于Tokio实现了 setInterval(callback, ms) 和 setTimeout(callback, ms) 类似于Javascript的API. |
homepage | https://github.com/jafshare/tokio-interval |
repository | https://github.com/jafshare/tokio-interval |
max_upload_size | |
id | 790659 |
size | 26,869 |
基于 tokio
实现了类似于 js
的 setInterval
、setTimeout
的功能
目前提供了以下几个宏:
set_interval!(cb, ms)
创建一个定时器,支持传入一个闭包set_interval_async!(|| future, ms)
创建一个定时器,支持传入一个返回 future 回调set_timeout!(cb, ms)
创建一个延时器,支持传入一个闭包set_timeout_async!(future, ms)
创建一个延时器,支持传入一个 futureclear_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;
}