@
nagisaushio @
my3157 @
nebkad 感谢回复!
我主要写 Go ,一般都是先写抽象系统,然后写实现代码,到 Rust 这边就磕磕碰碰。
比如,一个父级大模块有个 async run 方法,里面包含多个独立小模块,各自包含 async run 方法,然后在父模块做组合编排。这个操作在 Rust 的 async 系统就很糟心,而且很不优雅,情感上特别难受。
就下面这个还报错,还得让我改成 Future 形式,编译器过于保守了。所以我研究好几种方式,比如不用 async ,用 nonblocking_run 。
你们是怎么做的?赐教!感谢🙏
```rust
trait A: Send {
- async fn run(&mut self);
+ fn run(&mut self) -> impl std::future::Future<Output = ()> + Send
}
struct B<T>
where
T: A + 'static,
{
core: Option<T>,
}
impl<T> B<T>
where
T: A + 'static,
{
async fn run(&mut self) -> Result<()> {
let mut core = self.core.take().unwrap();
tokio::spawn(async move {
core.run().await });
Ok(())
}
}
```