1 个不稳定版本
0.1.0 | 2024年2月20日 |
---|
2546 在 Rust 模式
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