5个不稳定版本
0.4.2 | 2023年9月17日 |
---|---|
0.4.1 | 2023年9月6日 |
0.4.0 | 2022年9月8日 |
0.3.0 | 2021年8月10日 |
0.1.1 |
|
#727 in 异步
39 每月下载量
用于 7 个crate(5 直接使用)
19KB
316 行
killswitch
开关是一个特殊用途的类似通道的对象,用于向任务发送终止信号。
lib.rs
:
此库为信号(和在 async
上下文中接收)提供两个独立的结构
KillSwitch
既是触发器又是接收器。pair::KillTrig
和pair::KillWait
(使用 [pair::create()
创建)作为终止信号的发送者和接收者。
KillSwitch
向(多个)异步任务发送自我终止请求。
use std::error::Error;
use tokio::time::{sleep, Duration};
use killswitch::KillSwitch;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let ks = KillSwitch::new();
tokio::spawn(killable(String::from("test1"), ks.clone()));
tokio::spawn(killable(String::from("test2"), ks.clone()));
sleep(Duration::from_secs(1)).await;
println!("Triggering kill switch");
ks.trigger();
tokio::spawn(killable(String::from("test3"), ks.clone()));
tokio::spawn(killable(String::from("test4"), ks.clone()));
// Wait for all waiters to drop
ks.finalize().await;
Ok(())
}
async fn killable(s: String, ks: KillSwitch) {
println!("killable({}) entered", s);
ks.wait().await;
println!("killable({}) leaving", s);
}
killswitch
的开发是为了帮助创建可中断的异步任务,并与多个等待特性(如 tokio::select!
宏)一起使用。
依赖项
~0.4–5.5MB
~11K SLoC