1 unstable release
0.1.0 | Jul 2, 2023 |
---|
#789 in Asynchronous
658 downloads per month
Used in 3 crates
5KB
63 lines
tokio-async-drop
This is a quick and dirty "hack" (not really an hack, since it's the desired behaviour of used components) to allow async drop in a tokio multithreaded runtime.
The same approach could potentially be used to allow async code in many other situations, e.g. inside a once_cell::sync::Lazy
static variable.
Example
struct Foo<'a> {
inner: &'a mut u8,
}
impl<'a> Foo<'a> {
async fn bar(&mut self) {
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
*self.inner = 1;
}
}
impl<'a> Drop for Foo<'a> {
fn drop(&mut self) {
tokio_async_drop!({
self.bar().await;
});
}
}
#[tokio::main]
async fn main() {
let mut semaphore = 0;
let f = Foo {
inner: &mut semaphore,
};
drop(f);
assert_eq!(semaphore, 1);
}