首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Tokio的Handle::block_on和Runtime::block_on有什么不同?

Tokio的Handle::block_on和Runtime::block_on有什么不同?
EN

Stack Overflow用户
提问于 2021-08-30 06:44:53
回答 1查看 297关注 0票数 2

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

这就是我创建Handle的方式。除了最后两行之外,Runtime是相同的。

代码语言:javascript
运行
AI代码解释
复制
let runtime = runtime::Builder::new_multi_thread()
    .enable_all()
    .build()
    .unwrap()
    .handle() // not needed for Runtime
    .clone(); // ---

然后,我调用一个函数,该函数如下所示:

代码语言:javascript
运行
AI代码解释
复制
async fn run(){
    // calls get data
}

self.runtime.block_on(run())

这是它挂起的代码。当从Runtime运行时,它工作得很好,使用Handle时,它在TcpStream::connect()挂起。

代码语言:javascript
运行
AI代码解释
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-30 23:26:34

我通过确保Runtime对象不会超出作用域并被删除来修复此问题。我的印象是,除了only the Runtime object itself can之外,只需要Handle来保持运行时的活力。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68986021

复制
相关文章
Tokio 中 hang 死所有 worker 的方法
Tokio[1] 的 task(一个Future) 里如果使用了阻塞调用, 例如 std::sync::Mutex, 会阻塞当前的 tokio-worker 线程, 这个 worker 无法再执行其他 task. 所以代码里如果不可避免的有(少量的)阻塞调用, 就要为 runtime 启动更多的 worker 线程, 保证存在没被阻塞的 worker 来执行待调度的 task, 以避免整个tokio runtime 完全 hang 住(有 task 但没 worker 运行它).
drdrxp
2023/02/20
6420
Tokio 中 hang 死所有 worker 的方法
【原创】Rust tokio 如何以异步非阻塞方式运行大量任务
tokio 官方给了一个完整的例子:手动构建 runtime ,利用 block_on 来运行多个任务。tokio 的任务是由 tokio::spawn 之类的函数产生的 JoinHandle 类型,而且是个 Future 。
MikeLoveRust
2021/09/08
5.1K0
Futures低调发布0.3.1正式版,全面支持async/await
无需Tokio/Async-std,自带Runtime。代码库的参考文档比较完善,只是缺少应用指南。下面是一段测试代码:
MikeLoveRust
2019/11/14
7510
两张图展示当前 Rust Web 生态
由图可见,tokio 生态目前在网络服务和Web 开发方面基本的核心组件都已齐全。尤其是随着 Axum 框架的推出,tokio 在 Web 生态已接近完备。
张汉东
2021/09/02
2K0
两张图展示当前 Rust  Web 生态
时序数据库Influx-IOx源码学习四(Run命令的执行)
上篇介绍到:InfluxDB-IOx的命令行及配置,详情见:https://my.oschina.net/u/3374539/blog/5017858
刘涛华
2021/04/26
7100
Rust Async: smol源码分析-Executor篇
本文来自知乎:https://zhuanlan.zhihu.com/p/137353103
MikeLoveRust
2020/05/14
1K0
Rust Async: smol源码分析-Executor篇
【翻译】从头实现Rust异步执行器
原文:https://stjepang.github.io/2020/01/31/build-your-own-executor.html 现在我们已经构建了block_on函数,是时候进一步将其转换为一个真正的执行器了。我们希望我们的遗执行器不只是一次运行一个future,而是同时运行多个future!
MikeLoveRust
2020/07/23
9100
yew SSR 服务器端渲染,和 tide、actix-web、warp 一起
Yew 是 wasm(WebAssembly)框架,可谓 Rust 生态中最受关注的项目之一,github 点赞数量接近 20k。其性能在和其它 js 前端库评测中,也很出彩。多个评测文章中,可以和轻量级的 preact 等性能等同,相较于 react.js 和 vue.js,具有多方面的优势。
niqin.com
2022/09/01
2.1K0
Vue 和 React 有什么不同?
其实我对这两大框架也没有认真钻研过它们的细节,也就是工作上用它们写一些简单业务,或偶尔看看相关的博客文章,但还是有一些浅显的认识的,写下来记录一下。
前端西瓜哥
2022/12/21
1.9K0
Vue 和 React 有什么不同?
【Rust每周一知】Rust 异步入门
这是一篇博文翻译,略有删减,整理代码方便统一阅读,Github链接:https://github.com/lesterli/rust-practice/tree/master/head-first/async-primer。
MikeLoveRust
2020/02/24
1.9K0
dotnet 方法名 To 和 As 有什么不同
在看到 dotnet 框架里面有很多方法里面用了 ToXx 和 AsXx 好像都是从某个类转换为另一个类,那么这两个方法命名有什么不同
林德熙
2022/08/07
1.4K0
Webpack和JShaman相比有什么不同?
JShaman专门用于对JS代码混淆加密,目的是让JavaScript代码变的不可读、混淆功能逻辑、加密代码中的隐秘数据或字符,是用于代码保护的。
用户8703799
2023/10/13
4330
UglifyJS 和JShaman相比有什么不同?
因此,两者是完全不同的。只是因为UglifyJS也具备些许混淆能力,常常使人们误以为它也是混淆加密工具。
用户8703799
2023/08/16
2720
js中==和===有什么不同之处
javaScript具有严格和类型转换相等比较。 对于严格相等比较符,要求比较的对象必须具有相同的类型,并且:
IT工作者
2022/01/25
2.1K0
“kill -9” 和 “kill -15” 有什么不同
可以用 kill -l 来查看具体有哪些信号编码,这里重点关注 9) SIGKILL 和 15) SIGTERM。
happyJared
2019/06/11
3.3K0
“kill -9” 和 “kill -15” 有什么不同
语句和表达式有什么不同
对于这个问题,我似乎知道答案,但当我尝试向别人解释时,我却语塞了。对于这个问题我有一种感觉,但无法清晰的表达出来。
chuckQu
2022/08/19
1.6K0
什么是敏捷BI?和传统BI有什么不同?
近些年来,随着数字化的快速发展,敏捷BI这个词也越来越流行。敏捷BI其实并不是什么新技术,相较于传统BI来说,是具有敏捷分析功能的新型BI。经过数十年的发展,商业智能BI从最初的简单的数据统计和报表功能,发展到现在拥有丰富的可视化,自动分析甚至智能洞察的功能。
数据前沿
2020/09/14
3K0
什么是敏捷BI?和传统BI有什么不同?
Salesforce生态和SAP生态有什么不同
1、一般软硬件系统集成解决方案商,会进行企业应用软件销售出货。在现在,服务器换成了云服务器、存储换成了云存储、数据库换成了云数据库,系统集成解决方案厂商换成了云集成解决方案厂商,换汤不换药。
PHP开发工程师
2021/05/19
2.1K0
Java和Golang有什么不同之处?
总体来说,Golang 更适合开发高并发和高性能的系统,而 Java 更适合开发大型企业级应用。
Regan Yue
2023/04/01
2.2K0
页面刷新的reload()和refresh()方法有什么不同
window.reload是重新加载当前需要的所有内容,也就包括页面和后台的代码,此过程中实际上是从后台重新进行操作;
全栈程序员站长
2022/09/09
6K0

相似问题

如何在block_on部分交换数据?

13

有办法关闭tokio::runtime::Runtime吗?

114

IPC send / on和handle中的invoke /handle有什么不同?

1344

futures::executor::block_on和block_in_place之间有性能差异吗?

117

WinAPI中的HANDLE和HFILE有什么不同?

51
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档