5 个版本

0.2.1 2023 年 4 月 16 日
0.2.0 2023 年 4 月 16 日
0.1.5 2022 年 6 月 27 日
0.1.4 2021 年 4 月 28 日
0.1.3 2021 年 3 月 28 日

#203并发 中排名

34 每月下载量
用于 4 个 Crates (3 直接)

Apache-2.0

20KB
254

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

permit::Permit 是一个用于取消操作的结构体。

用例

  • 优雅的服务器关闭
  • 取消耗时过长的操作
  • 在撤销授权时停止正在进行的操作

特性

  • 从属许可。撤销许可也会递归地撤销其从属许可。
  • 释放许可以递归地撤销其从属许可。
  • 等待所有从属许可释放。
  • 实现了 Future。您可以 await 许可,并在它被撤销时返回。
  • 类似于 Golang 的 context
  • 仅依赖于 std
  • 禁止(不安全代码)
  • 100% 测试覆盖率

限制

替代方案

  • async_ctx
    • 良好的 API
    • 异步操作
  • stopper
    • 异步操作
  • io-context
    • 保留 Any
    • 未维护
  • ctx
    • 保留一个 Any
    • API 是 Golang 的 context 的直接复制,即使这对于 Rust 来说没有意义。例如,要取消,必须复制上下文并调用返回的 Box<Fn>
    • 未维护

相关 Crates

示例

优雅关闭

let top_permit = permit::Permit::new();
// Start some worker threads.
for _ in 0..5 {
    let permit = top_permit.new_sub();
    std::thread::spawn(move || {
        while !permit.is_revoked() {
            // ...
        }
    });
}
wait_for_shutdown_signal();
// Revoke all thread permits and wait for them to
// finish and drop their permits.
top_permit
    .revoke()
    .wait_subs_timeout(Duration::from_secs(3))
    .unwrap();

Cargo Geiger 安全报告


Metric output format: x/y
    x = unsafe code used by the build
    y = total unsafe code found in the crate

Symbols: 
    🔒  = No `unsafe` usage found, declares #![forbid(unsafe_code)]= No `unsafe` usage found, missing #![forbid(unsafe_code)]
    ☢️  = `unsafe` usage found

Functions  Expressions  Impls  Traits  Methods  Dependency

0/0        0/0          0/0    0/0     0/0      🔒  permit 0.2.1

0/0        0/0          0/0    0/0     0/0    

变更日志

  • v0.2.1 - 修复了 sleepsleep_until 有时不会提前返回的问题。
  • v0.2.0
    • try_wait_for 重命名为 wait_subs_timeout
    • try_wait_until 重命名为 wait_subs_deadline
    • wait* 方法中将自旋锁替换为 Condvar
    • 移除 wait
    • 添加 sleepsleep_until
  • v0.1.5 - 实现 Debug
  • v0.1.4 - 修复了 bug,其中 revoke() 和然后 wait() 不会等待。
  • v0.1.3
    • 不要保留或唤醒过时的 std::task::Waker 结构。
    • 消除导致不必要的唤醒的竞争条件。
  • v0.1.2 - 实现 Future
  • v0.1.1 - 使 revoke 返回 &Self
  • v0.1.0 - 初始版本

许可协议:Apache-2.0

无运行时依赖