1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
use std::time::Duration;
use tokio::time;
/// Scheduled task utility class
///
/// TODO 后续添加cron表达式相关
pub struct SchedulingUtil;
impl SchedulingUtil {
/// 设置一个定时任务,按照指定的时间间隔重复执行
///
/// # 参数
/// * `task` - 要执行的任务函数,该函数不接受参数且无返回值
/// * `interval` - 执行间隔时间,单位为秒
///
/// # 返回值
/// 无返回值
///
/// # 说明
/// 该函数会创建一个定时器,按照指定的间隔时间无限循环执行传入的任务函数
pub async fn set_interval(mut task: impl FnMut(), interval: u64) {
// 创建定时器实例,用于控制任务执行间隔
let mut interval = time::interval(Duration::from_secs(interval));
loop {
// 等待下一个时间点到达
interval.tick().await;
// 执行任务函数
task();
}
}
/// 异步设置超时执行任务的函数
///
/// 该函数会等待指定的超时时间后执行传入的任务闭包
///
/// # 参数
/// * `task` - 一个只执行一次的闭包函数,在超时结束后被调用
/// * `timeout` - 超时时间,单位为秒
///
/// # 返回值
/// 无返回值
pub async fn set_timeout(task: impl FnOnce(), timeout: u64) {
// 等待指定的超时时间
time::sleep(Duration::from_secs(timeout)).await;
// 执行传入的任务
task();
}
}