Crates.io | tokio-interruptible-future |
lib.rs | tokio-interruptible-future |
version | 8.2.0 |
source | src |
created_at | 2022-01-27 21:26:44.810593 |
updated_at | 2022-07-27 04:37:34.061961 |
description | Easily interrupt async code in given check points. It's useful to interrupt threads/fibers. |
homepage | |
repository | https://github.com/vporton/tokio-interruptible-future |
max_upload_size | |
id | 522761 |
size | 6,381 |
Easily interrupt async code in given check points. It's useful to interrupt threads/fibers.
DISCLAIMER: Not enough tested.
TODO: Add documentation.
Recommended to use together with tokio-notify-drop.
#[derive(Debug, PartialEq, Eq)]
enum MyError {
Interrupted(InterruptError),
}
impl From<InterruptError> for MyError {
fn from(value: InterruptError) -> Self {
Self::Interrupted(value)
}
}
struct Test {
interrupt_notifier: Notify,
}
impl Interruptible for Test {
fn interrupt_notifier(&self) -> &Notify {
&self.interrupt_notifier
}
}
impl Test {
pub fn new() -> Self {
Self {
interrupt_notifier: Notify::new()
}
}
pub async fn f(&self) -> Result<(), MyError> {
self.interruptible/*::<(), MyError>*/(async {
loop {
self.interrupt(); // In real code called from another fiber or another thread.
self.check_for_interrupt::<MyError>().await?;
}
}).await
}
pub async fn g(&self) -> Result<u8, MyError> {
self.interruptible::<u8, MyError>(async {
Ok(123)
}).await
}
}