#tokio #set-timeout #interval #set-interval #timeout

tokio-js-set-interval

允许您在 tokio 运行时内部使用类似于JavaScript的 setInterval(callback, ms)setTimeout(callback, ms)。该库提供了宏 set_interval!(callback, ms)set_timeout!(callback, ms)

8个稳定版本

1.3.0 2023年6月25日
1.2.1 2023年6月25日
1.2.0 2022年9月12日
1.1.0 2021年6月15日
1.0.3 2021年5月17日

11 in #timeout

Download history 34/week @ 2024-04-22 13/week @ 2024-05-13 41/week @ 2024-05-20 21/week @ 2024-05-27 18/week @ 2024-06-03 70/week @ 2024-06-10 39/week @ 2024-06-17 157/week @ 2024-06-24 88/week @ 2024-07-01 88/week @ 2024-07-08 65/week @ 2024-07-15 43/week @ 2024-07-22 80/week @ 2024-07-29 47/week @ 2024-08-05

236 每月下载量

MIT 协议

34KB
418

tokio-js-set-interval

crate tokio-js-set-interval 允许您在 tokio 运行时内部使用类似于JavaScript的 setInterval(callback, ms)setTimeout(callback, ms) (https://tokio.rs/)。该库提供了宏

  • set_interval!(callback,ms),
  • set_interval_async!(future,ms),
  • set_timeout!(callback,ms),
  • 以及 set_timeout_async!(async_callback, ms)

如何使用

Cargo.toml

[dependencies]
# don't forget that you also need "tokio" for the tokio runtime!
tokio-js-set-interval = "<latest-version>"

code.rs

use std::time::Duration;
use tokio_js_set_interval::{set_interval, set_timeout, clear_interval};

#[tokio::main]
async fn main() {
    set_timeout!(println!("hello from timeout"), 25);
    set_interval!(println!("hello from interval"), 10);
    // you can clear intervals if you want
    let id = set_interval!(println!("hello from interval"), 10);
    clear_interval(id);

    // give enough time before tokios runtime exits
    tokio::time::sleep(Duration::from_millis(40)).await;
}

限制

它们的行为与它们的JavaScript对应物类似,有一些例外

  • 只有当 tokio 运行时长够久时才会执行。
  • 为了编译,回调必须返回联合类型,即 )
    => 所有操作都必须通过副作用完成
  • 再次强调,没有任何保证 任务将得到执行
    (=> 然而,对于低优先级的后台任务和学习的效果来说可能很有用)

趣闻轶事

我不是 tokio (或Rust中的async/await/futures一般) 的专家,不知道这是否遵循最佳实践。但它帮助我理解了 tokio 的工作原理。希望它对你们中的一些人也有帮助。

背后的功能相当简单。然而,我花费了一些时间来弄清楚宏应该接受什么样的输入以及宏后面函数的泛型参数应该如何组织。特别是,在开发过程中,宏的 *_async!() 版本相当复杂。

兼容性与MSRV

  • MSRV为1.66
  • 从版本 1.0 开始支持Tokio。注意,Rust >= 1.73 会拒绝使用低于 <1.18 的Tokio。

依赖项

~2–3MB
~46K SLoC