gpt4 book ai didi

rust - Tokio 的 Handle::block_on 与 Runtime::block_on 有何不同?

转载 作者:行者123 更新时间:2023-12-05 04:46:01 25 4
gpt4 key购买 nike

tokio::runtime::Handle.block_ontokio::runtime::Runtime.block_on 有何不同? Handle.block_on 导致一些代码挂起,而 Runtime.block_on 工作正常。

这就是我创建 Handle 的方式。 Runtime 是相同的减去最后 2 行。

let runtime = runtime::Builder::new_multi_thread()
.enable_all()
.build()
.unwrap()
.handle() // not needed for Runtime
.clone(); // ---

然后我调用一个函数:

async fn run(){
// calls get data
}

self.runtime.block_on(run())

这是它挂起的代码。从 Runtime 运行时它工作正常,使用 Handle 它卡在 TcpStream::connect()

async fn get_data(addr: String) -> Result<Data> {
let c = TcpStream::connect(addr.clone()).await?; // hangs here
let t = get_data_from_connect(c).await?;
return Ok(t);
}

最佳答案

我通过确保 Runtime 对象不会超出范围并被丢弃来修复此问题。我的印象是只需要 Handle 来保持运行时事件但是 only the Runtime object itself can .

关于rust - Tokio 的 Handle::block_on 与 Runtime::block_on 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68986021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com