| Crates.io | tokio-shield |
| lib.rs | tokio-shield |
| version | 0.1.1 |
| created_at | 2023-05-25 15:53:09.170382+00 |
| updated_at | 2023-09-20 08:53:28.166791+00 |
| 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);
}