与tokio同步调用异步函数

时间:2020-01-01 18:22:13

标签: rust async-await rust-tokio

我一直在寻找文档,以找到一种同步调用异步函数的方法。具体来说,我正在尝试从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)
}

playground

在这种情况下,我可以克服它,而只是避免全部使用,但这似乎是我遇到的一个严重限制。

我的第一个想法是先使用tokio::task::spawn,然后再使用联接句柄,但是由于联接函数本身就是未来,所以这似乎是不可能的。我只会在互斥量返回的将来调用poll,但是在任何地方都找不到如何提供Context参数的方法,这使我相信这是内部执行程序。

当我四处搜寻时,我发现async_std::task::block_on似乎完全可以满足我的需要,但我想坚持使用Tokio。我是否缺少某些东西,或者这实际上是Tokio框架的局限性?

0 个答案:

没有答案