8 个不稳定版本

1.0.0-rc.52024年2月7日
0.32.0 2022年5月23日
0.8.1 2021年1月29日
0.2.7 2020年10月12日
0.0.7 2020年1月15日

#306并发 中排名

Download history 9/week @ 2024-04-22 5/week @ 2024-04-29 2/week @ 2024-05-13 15/week @ 2024-05-20 28/week @ 2024-05-27 24/week @ 2024-06-03 18/week @ 2024-06-10 19/week @ 2024-06-17 22/week @ 2024-06-24 7/week @ 2024-07-08 44/week @ 2024-07-15 18/week @ 2024-07-22 15/week @ 2024-07-29 23/week @ 2024-08-05

每月 100 次下载
用于 10 个包9 个直接使用)

BSD-3-Clause

14KB
232

方便的关闭信号

ShutdownSignal 是一个单次通道的方便包装器,允许不同的线程相互通知它们应该停止工作。

基本用法

首先,创建关闭信号。

let mut shutdown = Shutdown::new();

使用 to_signal 创建一个当 Shutdown 触发时将解决的 future。

let signal = shutdown.to_signal();
assert_eq!(shutdown.is_triggered(), false);

您可以将信号克隆并移动到需要被告知何时关闭的线程中。这里我们使用 tokio,但这在任何基于 future 的运行时中都能工作

tokio::spawn(async move { 
    signal.await.unwrap(); 
    println!("Finished");    
});

然后,当您想触发关闭信号时,调用 trigger。所有信号都将解决。

shutdown.trigger().unwrap();   // "Finished" is printed
// Shutdown::trigger is idempotent
shutdown.trigger().unwrap();
assert_eq!(shutdown.is_triggered(), true);

注意:如果关闭信号实例被丢弃,它将触发信号,因此 Shutdown 实例应该根据应用程序的需求保留。

依赖关系

~1MB
~15K SLoC