use tokio::{sync::oneshot, task::yield_now}; use tokio_util::task::AbortOnDropHandle;
#[tokio::test] asyncfn aborts_task_on_drop() { let (mut tx, rx) = oneshot::channel::<bool>(); let handle = tokio::spawn(asyncmove { let _ = rx.await;
}); let handle = AbortOnDropHandle::new(handle);
drop(handle);
tx.closed().await;
assert!(tx.is_closed());
}
#[tokio::test] asyncfn aborts_task_directly() { let (mut tx, rx) = oneshot::channel::<bool>(); let handle = tokio::spawn(asyncmove { let _ = rx.await;
}); let handle = AbortOnDropHandle::new(handle);
handle.abort();
tx.closed().await;
assert!(tx.is_closed());
assert!(handle.is_finished());
}
#[tokio::test] asyncfn does_not_abort_after_detach() { let (tx, rx) = oneshot::channel::<bool>(); let handle = tokio::spawn(asyncmove { let _ = rx.await;
}); let handle = AbortOnDropHandle::new(handle);
handle.detach(); // returns and drops the original join handle
yield_now().await;
assert!(!tx.is_closed()); // task is still live
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.19 Sekunden
(vorverarbeitet am 2026-08-27)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.