5 unstable releases
0.4.2 | Sep 17, 2023 |
---|---|
0.4.1 | Sep 6, 2023 |
0.4.0 | Sep 8, 2022 |
0.3.0 | Aug 10, 2021 |
0.1.1 |
|
#453 in Asynchronous
87 downloads per month
Used in 8 crates
(6 directly)
19KB
316 lines
killswitch
A killswitch is a special-purpose channel-like object used to signal to tasks that they should terminate.
lib.rs
:
This library provides two separate structures for signalling (and
receiveing) termination requests [in async
contexts]:
KillSwitch
acts as both a trigger and a receiver.pair::KillTrig
andpair::KillWait
(created using [pair::create()
]) act as a kill signal sender and receiver.
KillSwitch
Signal a request for (multiple) async tasks to self-terminate.
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
was developed to help create abortable async tasks in
conjuction with multiple-wait features such as the tokio::select!
macro.
Dependencies
~0.4–5MB
~11K SLoC