Имеет ли ржавчина в настоящее время библиотечную функцию, аналогичную JavaScript setTimeout
и setInverval
?, то есть библиотеке, которая может вызывать несколько setTimeout
и setInterval
для реализации управления несколькими задачами в в то же время.
Я чувствую, что tokio
не особенно удобно использовать. Я полагаю, что это будет использоваться следующим образом:
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_interval реализован таким образом, несколько комбинации, динамические элементы c, добавление и удаление, а также отмена не особенно удобны:
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_for
можно использовать для их выполнения по очереди, но детали на самом деле более сложные.
Тем не менее, я думаю, что эта общая возможность, возможно, уже была реализована, но я пока не нашел, поэтому я хочу спросить здесь, большое спасибо.
И что важно, Я надеюсь, что он может поддерживать один поток