gpt4 book ai didi

loops - 如何使用 Tokio 在每个周期或间隔(以秒为单位)触发功能?

转载 作者:行者123 更新时间:2023-12-04 16:24:48 24 4
gpt4 key购买 nike

在 Node.js 中,我可以设置触发某个事件的时间间隔,

function intervalFunc() {
console.log('whelp, triggered again!');
}

setInterval(intervalFunc, 1500);
然而,Tokio 的界面 interval有点复杂。这似乎与间隔的更字面定义有关,而不是在间隔调用函数,它只是停止线程直到时间过去(使用 .await )。
Tokio 中是否有一个原语“每 x 秒”调用一个函数或类似的函数?如果没有,是否已经出现了一个成语来做到这一点?
我只需要定期运行一个函数......我也不关心其他线程。这只是 Tokio 事件循环中的一个函数。

最佳答案

Spawn a Tokio task永远做某事:

use std::time::Duration;
use tokio::{task, time}; // 1.3.0

#[tokio::main]
async fn main() {
let forever = task::spawn(async {
let mut interval = time::interval(Duration::from_millis(10));

loop {
interval.tick().await;
do_something().await;
}
});

forever.await;
}
您也可以使用 tokio::time::interval 创建一个可以重复勾选的值。执行勾选并在 stream::unfold 的主体内调用您的函数创建流:
use futures::{stream, StreamExt}; // 0.3.13
use std::time::{Duration, Instant};
use tokio::time; // 1.3.0

#[tokio::main]
async fn main() {
let interval = time::interval(Duration::from_millis(10));

let forever = stream::unfold(interval, |mut interval| async {
interval.tick().await;
do_something().await;
Some(((), interval))
});

let now = Instant::now();
forever.for_each(|_| async {}).await;
}

async fn do_something() {
eprintln!("do_something");
}
也可以看看:
  • How can I run a set of functions concurrently on a recurring interval without running the same function at the same time using Tokio?
  • 关于loops - 如何使用 Tokio 在每个周期或间隔(以秒为单位)触发功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66863385/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com