2 releases
0.1.1 | Sep 20, 2023 |
---|---|
0.1.0 | May 25, 2023 |
#1633 in Asynchronous
109 downloads per month
Used in poem-ext
7KB
71 lines
tokio-shield
Prevent futures in Rust from being aborted by wrapping them in tasks.
Example
use std::time::Duration;
use tokio::{sync::oneshot, time::sleep};
use tokio_shield::Shield;
#[tokio::main]
async fn main() {
let (tx, mut rx) = oneshot::channel();
// Create and shield a future that waits for 10ms and then returns a value
// via a oneshot channel.
let future = async {
sleep(Duration::from_millis(10)).await;
tx.send(42).unwrap();
}.shield();
// Spawn a task to run this future, but cancel it after 5ms.
let task = tokio::spawn(future);
sleep(Duration::from_millis(5)).await;
task.abort();
sleep(Duration::from_millis(5)).await;
// After 10ms the value can successfully be read from the oneshot channel,
// because `shield` prevented our future from being canceled.
assert_eq!(rx.try_recv().unwrap(), 42);
}
Dependencies
~2.6–8MB
~61K SLoC