8 个不稳定版本
1.0.0-rc.5 | 2024年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 在 并发 中排名
每月 100 次下载
用于 10 个包(9 个直接使用)
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