Crates.io | tokio-shield |
lib.rs | tokio-shield |
version | 0.1.1 |
source | src |
created_at | 2023-05-25 15:53:09.170382 |
updated_at | 2023-09-20 08:53:28.166791 |
description | Prevent futures from being aborted by wrapping them in tasks |
homepage | |
repository | https://github.com/Defelo/tokio-shield |
max_upload_size | |
id | 874367 |
size | 11,893 |
Prevent futures in Rust from being aborted by wrapping them in tasks.
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);
}