rust目前是否有类似于JavaScript的库实现函数';s setTimeout和setInverval?
rust目前是否具有类似于JavaScript的rust目前是否有类似于JavaScript的库实现函数';s setTimeout和setInverval?,rust,async-await,rust-tokio,Rust,Async Await,Rust Tokio,rust目前是否具有类似于JavaScript的setTimeout和setInverval?的库实现功能,即,可以调用多个setTimeout和setInterval来同时实现多个任务的管理的库 我觉得东京使用起来并不特别方便。我想象它是这样使用的: fn callback1() { println!("callback1"); } fn callback2() { println!("callback2"); } set_interval(callback1, 10);
setTimeout
和setInverval
?的库实现功能,即,可以调用多个setTimeout
和setInterval
来同时实现多个任务的管理的库
我觉得东京使用起来并不特别方便。我想象它是这样使用的:
fn callback1() {
println!("callback1");
}
fn callback2() {
println!("callback2");
}
set_interval(callback1, 10);
set_interval(callback1, 20);
set_timeout(callback1, 30);
当然,我可以模拟一个函数使其工作:
// just for test, not what I wanted at all
type rust_listener_callback = fn();
fn set_interval(func: rust_listener_callback, duration: i32) {
func()
}
fn set_timeout(func: rust_listener_callback, duration: i32) {
func();
}
如果以这种方式实现set_间隔,则多个组合、动态添加和删除以及取消并不特别方便:
use tokio::time;
async fn set_interval(func: rust_listener_callback, duration: u64) {
let mut interval = time::interval(Duration::from_millis(duration));
tokio::spawn(async move {
loop {
interval.tick().await;
func()
}
}).await;
}
// emm maybe loop can be removed, just a sample
然而,我想知道的是,是否有一个库来做这件事,而不是自己写
我知道我是否会自己写。一般来说,所有函数都被转换成一个任务队列或任务树,然后可以使用的tokio::time::delay_逐个执行,但细节实际上更复杂
不过,我认为这项一般能力可能已经实施,但我暂时还没有发现,所以我想在这里问一下,非常感谢
重要的是,我希望它能够支持单线程几天前我问了自己同样的问题,为这个问题创建了一个解决方案(用于运行时),并且刚刚找到了你的stackoverflow帖子
代码.rs
use std::time::Duration;
use tokio_js_set_interval::{set_interval, set_timeout};
#[tokio::main]
async fn main() {
println!("hello1");
set_timeout!(println!("hello2"), 0);
println!("hello3");
set_timeout!(println!("hello4"), 0);
println!("hello5");
// give enough time before tokios runtime exits
tokio::time::sleep(Duration::from_millis(1)).await;
}
但必须谨慎使用。不能保证将来会执行(因为tokios运行时必须运行足够长的时间)。仅在以下情况下使用:
- 出于教育目的
- 如果您有低优先级的后台任务,您不希望总是执行这些任务
几天前,我问了自己同样的问题,为这个问题创建了一个解决方案(针对运行时),刚刚找到了你的stackoverflow帖子
代码.rs
use std::time::Duration;
use tokio_js_set_interval::{set_interval, set_timeout};
#[tokio::main]
async fn main() {
println!("hello1");
set_timeout!(println!("hello2"), 0);
println!("hello3");
set_timeout!(println!("hello4"), 0);
println!("hello5");
// give enough time before tokios runtime exits
tokio::time::sleep(Duration::from_millis(1)).await;
}
但必须谨慎使用。不能保证将来会执行(因为tokios运行时必须运行足够长的时间)。仅在以下情况下使用:
- 出于教育目的
- 如果您有低优先级的后台任务,您不希望总是执行这些任务
在要延迟的异步代码开头添加delay\u有什么问题吗?@Boiethios-emmm,谢谢你,但我不知道你是否理解我的全部意图,这里不仅仅是一个延迟,至少是针对setTimeout
部分。你使用Interval
错误:这是一个流,所以它必须处理“多重组合、动态添加和删除以及取消”。@mcarton也许我对stream不太了解,但我认为使用stream的方法来管理任务不是很方便。我查看了的一些相关部分的实现,似乎没有使用这些方法。是否有进一步的信息或示例?谢谢你把delay\u放在你想延迟的异步代码的开头有什么问题吗?@Boiethios-emmm,谢谢你,但我不知道你是否理解我的全部意图,这里不仅仅是一个延迟,至少是针对setTimeout
部分。你使用Interval
错误:这是一个流,所以它必须处理“多重组合、动态添加和删除以及取消”。@mcarton也许我对stream不太了解,但我认为使用stream的方法来管理任务不是很方便。我查看了的一些相关部分的实现,似乎没有使用这些方法。是否有进一步的信息或示例?谢谢你