#tokio #drop #async #run-time #multi-threading #macro

tokio-async-drop

允许在 tokio 多线程运行时启用异步 drop 的宏

1 个不稳定版本

0.1.0 2023年7月2日

#789异步

Download history 192/week @ 2024-03-13 189/week @ 2024-03-20 72/week @ 2024-03-27 142/week @ 2024-04-03 272/week @ 2024-04-10 213/week @ 2024-04-17 240/week @ 2024-04-24 135/week @ 2024-05-01 102/week @ 2024-05-08 147/week @ 2024-05-15 120/week @ 2024-05-22 110/week @ 2024-05-29 148/week @ 2024-06-05 152/week @ 2024-06-12 220/week @ 2024-06-19 124/week @ 2024-06-26

658 每月下载量
用于 3 crates

WTFPL 许可证

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);
}

无运行时依赖