12 个版本

0.1.11 2022 年 3 月 20 日
0.1.10 2022 年 2 月 25 日
0.1.9 2021 年 3 月 28 日
0.1.6 2020 年 12 月 24 日

#437异步

Download history 48/week @ 2024-04-22 37/week @ 2024-04-29 41/week @ 2024-05-06 51/week @ 2024-05-13 32/week @ 2024-05-20 47/week @ 2024-05-27 28/week @ 2024-06-03 33/week @ 2024-06-10 31/week @ 2024-06-17 46/week @ 2024-06-24 1/week @ 2024-07-01 16/week @ 2024-07-08 55/week @ 2024-07-15 18/week @ 2024-07-22 33/week @ 2024-07-29 33/week @ 2024-08-05

每月 140 次下载
用于 12 个 crate(9 个直接使用)

Apache-2.0

41KB
667

saфина-计时器

crates.io version license: Apache 2.0 unsafe forbidden pipeline status

提供异步 sleep_forsleep_until 函数。

此 crate 是 safina 的一部分,一个安全的异步运行时。

特性

限制

  • stable 上构建需要 once_cell 功能。这使用了包含一些不安全代码的 once_cell crate。这是必要的,直到 std::lazy::OnceCell 稳定。
  • 计时器完成大约 2ms 晚,但决不会早
  • 分配内存

示例

safina_timer::start_timer_thread();
let duration = Duration::from_secs(10);
safina_timer::sleep_for(duration).await;
safina_timer::start_timer_thread();
let deadline =
    Instant::now() + Duration::from_secs(1);
safina_timer::sleep_until(deadline).await;
safina_timer::start_timer_thread();
let deadline =
    Instant::now() + Duration::from_secs(1);
let req = safina_timer::with_deadline(
    read_request(), deadline).await??;
let data = safina_timer::with_deadline(
    read_data(req), deadline).await??;
safina_timer::with_deadline(
    write_data(data), deadline ).await??;
safina_timer::with_deadline(
    send_response(data), deadline).await??;
safina_timer::start_timer_thread();
let req = safina_timer::with_timeout(
    read_request(), Duration::from_secs(1)
).await??;
let data = safina_timer::with_timeout(
    read_data(req), Duration::from_secs(2)
).await??;
safina_timer::with_timeout(
    write_data(data), Duration::from_secs(2)
).await??;
safina_timer::with_timeout(
    send_response(data),
    Duration::from_secs(1)
).await??;

文档

https://docs.rs/safina-timer

替代方案

  • futures-timer
    • 流行
    • 支持:Wasm、Linux、Windows、macOS
    • 包含大量 unsafe 代码
    • 使用 std::thread::park_timeout 作为其时间来源
  • async-io
    • 流行
    • 单次和重复计时器
    • 支持:Linux、Windows、macOS、iOS、Android 以及许多其他系统。
    • 使用polling crate,该crate会对操作系统进行不安全的调用。
  • async-timer
    • 支持:Linux & Android
    • 对操作系统进行不安全的调用
  • tokio
    • 非常受欢迎
    • 单次和重复计时器
    • 支持:Linux、macOS、其他类Unix操作系统、Windows
    • 速度快,内部复杂,且充满了unsafe
  • embedded-async-timer
    • 无标准库
    • 支持bare_metal

变更日志

  • v0.1.11 - 移除一些类型约束。
  • v0.1.10 - 使用safina-executor v0.2.0。
  • v0.1.9 - 命名定时器线程。
  • v0.1.8 - 增加测试覆盖率
  • v0.1.7 - 支持1.51版rust的稳定版本,以及once_cell
  • v0.1.6 - 更新依赖
  • v0.1.5 - 更新文档
  • v0.1.4 - 升级到新的safina-executor版本,该版本移除了对Box::pin的需求。
  • v0.1.3 - 在readme中添加徽章
  • v0.1.2
  • v0.1.1
  • v0.1.0 - 首次发布版本

待办事项

  • 添加一种安排作业(FnOnce结构体)的方法。

发布流程

  1. 编辑Cargo.toml并增加版本号。
  2. 运行./release.sh

许可证:Apache-2.0

依赖项

~47KB