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
236 每月下载量
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