我有一个rust程序,其中我有一个方法定义在线程thread中,每24小时触发一次。主函数定义如下:
use tokio::task;
#[tokio::main]
async fn main() -> Result<String, String> {
// spawing `trigger` in a separate thread
task::spawn(async move {
utilities::trigger().await
});
// other logic
Ok("Success".to_string())
}
utilities
是一个crate,它定义了异步方法trigger
,定义如下:-utilities.rs
pub async trigger() {
loop {
// other logic
// put the thread to sleep for 1 day
std::thread::sleep(time::Duration::from_millis(86400000));
}
}
上面的代码逻辑对我来说是有效的,但是我想知道是否有更好的方法来实现它。另外,我读到这个link,这个函数是阻塞的,不应该在异步函数中使用。有没有更好的方法来重写Rust中的trigger
方法?
1条答案
按热度按时间vxf3dgd41#
时雄有自己的异步版本
sleep
,它不会阻塞线程,而只是让任务休眠,让线程可以自由处理其他任务。此外,您还可以使用更复杂的调度箱,如
cron
: