我正试图用新的async
/await
语法、std::future::Future
s和Tokio的最新版本来实现这一点.我用的是Tokio 0.2.0-alpha.4
和Rust 1.39.0-nightly
.
我try 过的不同事情包括:
- 对我要存储在 struct 中的类型使用
Box<dyn>
- 在 struct 定义中使用泛型
我无法得到一个最低限度的工作版本,所以这里是我试图实现的一个简化版本:
async fn foo(x: u8) -> u8 {
2 * x
}
// type StorableAsyncFn = Fn(u8) -> dyn Future<Output = u8>;
struct S {
f: StorableAsyncFn,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let s = S { f: foo };
let out = (s.f)(1).await;
Ok(())
}
当然,这段代码无法编译,出现以下错误:
error[E0412]: cannot find type `StorableAsyncFn` in this scope
这里没有定义StorableAsyncFn
,这是我试图定义的类型.