1 个不稳定版本
新 0.1.1 | 2024年8月14日 |
---|---|
0.1.0 |
|
#18 在 #exit
每月下载量 216
12KB
98 行
chex —— 异步/同步检查退出信号
Chex 是一个简单的 Rust 库,它提供了一种全局退出信号,可以轻松地在程序中的任何/所有线程和异步任务之间共享。
这允许你在程序中设置清晰的策略,指定哪些条件应该拆解整个程序,并确保所有其他独立任务/线程将及时收到退出信号,并在退出前执行自己的拆解逻辑。具体来说,我们可以避免独立工作线程或 tokio 运行时在其中一个 Panics 后继续运行的情况。
可以通过两种方式获取 ChexInstance
- 从任何其他 ChexInstance 克隆
- 通过调用全局 Chex::get_chex_instance() 的相关函数从任何地方获取
使用指南
- 在主任务/线程调用非常早的时候调用 Chex::init(set_exit_on_panic: bool)。之后,可以通过 .get_instance() 立即获取 ChexInstance 并按需克隆,或者通过 Chex::get_chex_instance() 相关函数在程序中的任何其他地方获取,而无需持有从 init 返回的原始 &Chex 引用。
- 所有运行时间较长的线程和任务应定期检查是否已发出退出信号,即在 tokio::select!() 块中的匹配或非异步无限循环中的轮询检查。
- 如果在一个线程上调用 panic!() 应该捕获并发送退出信号到所有其他 ChexInstance 监听器,则使用 Chex::init(true) 初始化库。此行为也可以通过 Chex.set_exit_on_panic() 在事后启用。
有关与独立 tokio 运行时和非异步工作线程混合使用的示例,请参阅 examples/ 文件夹。
依赖项 + 依据
- async-broadcast:具有溢出的异步/同步通道
- log::error:仅在 Panic 路径上使用
依赖项
~555KB