1 个不稳定版本

0.1.0 2024年2月20日

2546Rust 模式

MIT 许可证

14KB

Also Sync

此库提供了一个宏,可以自动从您的异步函数派生出 *_sync 版本。它是通过全局 tokio 运行时,在所有核心上启用所有功能来实现的。

这允许在支持同步的同时进行以异步为主的库开发。

它如何工作?

看看下面的代码片段

use also_sync::also_sync;

struct Struct;

impl Struct {
    #[also_sync]
    pub async fn foo(&self, a: i32) -> i32 {
        42 * a
    }
}

这实际上是直接转换成的

struct Struct;

impl Struct {
    pub async fn foo(&self, a: i32) -> i32 {
        42
    }
    pub fn foo_sync(&self: a: i32) -> i32 {
        let handle = also_sync::TOKIO_RUNTIME.handle();
        handle.block_on(async move { self.foo(a).await })
    }
}

当然,它也适用于简单函数。

依赖项

~2.6–9MB
~74K SLoC