问题起因
想要通过 trait object
调用 Trait
中定义的 async method(s)
(async fn
通过 async-trait 模拟实现)
示例代码如下
use async_std::task;
use async_trait::async_trait;
#[async_trait]
trait Foo {
async fn foo(&self);
}
struct A;
#[async_trait]
impl Foo for A {
async fn foo(&self) {
println!("foo A")
}
}
fn main() {
task::block_on(async {
task::spawn(async {
let a = A;
// 直接通过 A 调用 foo 没有问题
a.foo().await;
let o = &a as &dyn Foo;
// 通过 trait object 编译错误如下
o