我一直在寻找文档,以找到一种同步调用异步函数的方法。具体来说,我正在尝试从tokio::sync::mutex::lock
实现中调用Display
,以提供有用的信息。
这是我想做的一个例子:
struct MyStruct(Mutex<u64>);
impl fmt::Display for MyStruct {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "Current Value: {}", self.0.lock().await)
}
}
fn main() {
let s = MyStruct(Mutex::new(8));
println!("{}", s)
}
在这种情况下,我可以克服它,而只是避免全部使用,但这似乎是我遇到的一个严重限制。
我的第一个想法是先使用tokio::task::spawn
,然后再使用联接句柄,但是由于联接函数本身就是未来,所以这似乎是不可能的。我只会在互斥量返回的将来调用poll
,但是在任何地方都找不到如何提供Context
参数的方法,这使我相信这是内部执行程序。
当我四处搜寻时,我发现async_std::task::block_on
似乎完全可以满足我的需要,但我想坚持使用Tokio。我是否缺少某些东西,或者这实际上是Tokio框架的局限性?