6个版本 (破坏性更新)
0.7.0 | 2022年6月18日 |
---|---|
0.6.1 | 2022年6月18日 |
0.6.0 | 2022年1月29日 |
0.4.0 | 2021年11月11日 |
0.2.0 | 2021年11月9日 |
#19 in #dynamic-dispatch
每月下载量 30
用于 2 个crate(通过 async_t)
24KB
551 代码行
async_t
这个库允许在编译时实现无成本的async特质。此库需要启用nightly和功能 generic_associated_types
和 type_alias_impl_trait
。在稳定版本编译时将自动使用dtolnay的async_trait。
它支持正常特质所能支持的所有功能,除了
- 默认的异步方法
- 空白实现
- 动态分派
它也可能在与需要指定生命周期的地方有问题。
// spawn example
#[async_trait]
trait Spawn {
// supports self, &self, &mut self and no self
async fn spawn() -> JoinHandle<()>;
}
#[async_trait]
impl Spawn for Spawner {
async fn spawn() -> JoinHandle<()> {
task::spawn(async {
// ...
})
}
}
async fn spawn<T: Spawn>() -> JoinHandle<()> {
T::spawn().await
}
#[async_trait]
trait Sleeper {
#[unsend]
async fn sleep<T>(t: T) -> T;
}
#[async_trait]
impl Sleeper for () {
#[unsend]
async fn sleep<T>(t: T) -> T {
task::sleep(Duration::from_secs(2)).await;
t
}
}
依赖
~1.5MB
~36K SLoC