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 2021年3月2日

#727 in 异步

39 每月下载量
用于 7 个crate(5 直接使用)

0BSD 许可证

19KB
316

killswitch

开关是一个特殊用途的类似通道的对象,用于向任务发送终止信号。


lib.rs:

此库为信号(和在 async 上下文中接收)提供两个独立的结构

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