1 个不稳定版本
0.1.0 | 2023年7月2日 |
---|
#789 在 异步
658 每月下载量
用于 3 crates
5KB
63 行
tokio-async-drop
这是一个快速而简单的“黑客”方法(其实并不是,因为它正是使用组件的预期行为),允许在 tokio 多线程运行时进行异步 drop。
同样的方法可能被用来在许多其他情况下允许异步代码,例如在once_cell::sync::Lazy
静态变量中。
示例
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);
}