Rust:关于Future和JoinHanlder的思考

news/2025/11/12 15:06:10/文章来源:https://www.cnblogs.com/wang-mj/p/19214122

Future和JoinHandler是不同的,但这两个都与异步(多线程)相关。

概念不同

  • JoinHandler:是指一个异步方法的句柄,用来监控或控制这个异步方法,以及接收异步方法的执行结果。
  • Future:表示的是在未来某个时刻执行的代码片段

执行的时机不同

  • JoinHandler:在有该对象的时候,该对象对应的异步任务已经开始执行,或已经进入执行队列了。
  • Future:Future只是代表未来某个时刻执行的代码片段,只有在开始调用时才开始执行。

相关联的点

JoinHanlder.join()方法和Future.await都是在当前线程下同步等待异步方法结束。
tokio::spawn()方法接收Future参数,并返回一个JoinHanlder对象。

写了一个小例子

use std::{sync::mpsc, thread, time::Duration};use tokio::runtime::Runtime;fn main() {let p = Person {name: "张三".into(),age: 19,};let (tx, rx) = mpsc::channel();let handler1 = std::thread::spawn(move || {println!("hanlder1 start run, and sleep 3s");thread::sleep(Duration::from_secs(3));println!("handler1 sleep completed!");match tx.send(p) {Ok(_) => println!("hanlder1 send success"),Err(err) => eprintln!("{err}"),}});let handler2 = std::thread::spawn(move || {println!("handler2 had run");match rx.recv() {Ok(_p) => println!("recv success"),Err(err) => eprintln!("{err}"),}});let f = async {println!("我是Future,需要等待调用才会执行");thread::sleep(Duration::from_secs(10));println!("Future执行结果");};println!("main thread will sleep 10s");thread::sleep(Duration::from_secs(10));let hander2_res = handler2.join();let hander1_res = handler1.join();if let Err(err) = hander2_res {eprintln!("hander2 run failed! {:?}", err);return;}if let Err(err) = hander1_res {eprintln!("handler1 run failed,{:?}", err);return;}println!("start run tokio thread");let rt = Runtime::new().expect("create tokio runtime failed!");rt.block_on(f);println!("completed!");
}//send:在线程间移动所有权//sync:在线程间可以共享只读的借用struct Person {name: String,age: u8,
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/963461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年衣柜顶线定做厂家权威推荐榜单:石膏顶线/欧式顶线/脚线源头厂家精选

一樘精美的衣柜,少不了那画龙点睛的顶线。它不仅是缝隙的遮蔽者,更是空间风格的塑造者。 在当今家居装修市场,全屋定制的渗透率正持续提升,消费者对细节装饰的需求也日益精细化。作为连接衣柜与天花的关键元素,衣…

完整教程:AI编程工具(Cursor/Copilot/灵码/文心一言/Claude Code/Trae)AI编程辅助工具全方位比较

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【IEEE出版 | 连续4年稳定EI检索】第五届新能源与电力工程国际学术会议(ICNEPE 2025)

第五届新能源与电力工程国际学术会议(ICNEPE 2025)将于2025年11月14日至16日在中国广州隆重举行。【连续4年稳定EI检索,发表有保障!】 【院士、Fellow出席报告,行业内精彩报告!EI期刊和EI会议检索同时征稿】 第五…

习题解析之:计算圆周率——拉马努金法

习题解析之:计算圆周率——拉马努金法【问题描述】编写一个拉马努金公式计算圆周率大小的小程序。 拉马努金曾经提出过很多关于求π的公式,这些公式都有以下几个特点: 等号右边的构造超乎常人想象,收敛速度极快! …

【刷题笔记】Placing Squares

Placing Squares 题解 拍死脑袋也想不出来啊。 敲黑板: \(x^2\) 的组合意义,就是在一个长为 \(x\) 的区间内放小球(一个黑色,一个白色,可以重叠)的方案数。 这样题目就转化为了在一个序列内插板,每两个板之间放…

P2279 [HNOI2003] 消防局的设立 题解加总结

正题之前 又是一道抓耳挠腮想了好久的好题, AC 了之后,感觉自己的思想又得到了洗礼 QwQ ,第一次写题解,有错望老师见谅 题目传送门思路 因为题目求的是覆盖树上所有点的所放置最少的消防站数量,因此此题需使用树形…

火车头采集器教程:夸克网盘批量转存(附工具)

本文将为你详细拆解火车头采集器与夸克网盘的配合技巧,通过这套教程,你能轻松把采集器抓取到的夸克网盘链接资源,一键转存至自己的夸克网盘,还能自动生成新的分享链接,极大提升资源整理效率。一、前置准备:工具与…

2025年隔音棉供货厂家权威推荐榜单:阻燃泡沫/隔热棉/阻燃棉源头厂家精选

在建筑装饰与家居品质需求持续升级的背景下,性能优异的隔音棉已成为酒店、KTV、住宅乃至工业厂房等多种场景的刚需材料。 据行业报告数据显示,2024年中国建筑隔音棉市场规模已达数十亿元人民币,预计到2031年将继续保…

售后无忧!CRMEB售后订单处理指南,高效管理退款退货流程

售后订单,显示用户提交的退款订单 1、订单筛选 订单—>售后订单在售后订单列表中,支持使用退款单状态、退款发起时间、退款单号进行搜索筛选; 2、订单退款/拒绝; 可查看订单详情,添加备注信息。操作立即退款或…

全景式数据库风险监测的理论与实践:加密防御与低误差识别的安全革新

(提示:数据库风险监测正在成为企业数字化安全体系的核心枢纽,其加密防御、低误差识别与全景式分析能力,正推动数据安全管理从被动响应走向主动防御。) 摘要: 在数字经济的高速演进中,数据库已成为企业最关键的资…

智能识别与持续合规:构建运行平稳的API风险监测体系

(提示:在数字化浪潮下,API风险监测系统正成为企业实现稳定运营与合规治理的关键基石。) 概要:随着数字经济的持续发展,数据已经成为企业最重要的生产要素之一,而API(应用程序接口)作为数据流通的“高速通道”…

5分钟极简代码:轻松学会XXTEA加密解密

本文专为想快速掌握XXTEA加密解密的朋友准备。极简代码搭配详细讲解,5分钟内带你从入门到实践,让加密解密变得触手可及。 XXTEA(eXtended eXtended Tiny Encryption Algorithm)是一种轻量级的对称分组加密算法,由…

痛苦在虚无中回荡 神最终恩赐了绝望 是爱恨交织的冲撞 你永无力再违抗

test38 老师,给我们做这种模拟赛良心不会痛吗?重建道路 首先你选边肯定不能破坏原有的连通性不然次数就不是最小的了,然后考虑初始连通块的最小点分别是 \(p_1,\dots,p_m\),你会选择依次将 \(p_1\) 与 \(p_2,\dots…

习题解析之:计算圆周率——无穷级数法

习题解析之:计算圆周率——无穷级数法【问题描述】π是个超越数,圆周率的超越性否定了化圆为方这种尺规作图精确求解问题的可能性。有趣的是,π可以用无穷级数表示:左边的展式是一个无穷级数,被称为莱布尼茨级数(…

AI驱动的技术突破:打造先进且合规的医疗数据分类分级新范式

一、概要: 在数字医疗快速发展的时代,医疗数据正成为推动临床诊疗、科研创新与医院管理的核心生产要素。如何在保障数据安全与隐私的前提下,实现数据的高效流通与智能治理,成为行业面临的关键命题。 知源-AI数据分…

教育行业数据库风险监测方案——基于行标、非侵入式、多维度场景化的安全治理新模式

一、概要: 在教育数字化的新时代,数据已成为学校运行、教学管理和政策决策的核心资产。然而,随着教育数据规模和复杂度的激增,数据库安全风险日益凸显——从敏感信息泄露到访问滥用,从影子数据库到权限越权,风险…

实用指南:JVM(十)-- 类的加载器

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Qoder 降价,立即生效!首购 2 美金/月

Qoder 降价,立即生效!首购 2 美金/月 Qoder 全球上线仅两个月,已获得全球数十万开发者的信赖与支持。 为了让每一位开发者都能轻松用上顶尖的 AI 编程工具,Qoder 面向全球开发者推出首购优惠:由原价 10 美元/月直…

AE扩展-After Ease v1.1.4 关键帧动画曲线缓入缓出调节

扩展简介 After Ease 是一款用于AE的动画辅助扩展,可轻松创建弹跳(Bounce)与回弹(Elastic)等缓动效果。它提供直观的曲线编辑界面,支持实时预览动画变化;可将表达式转换为关键帧,方便后期微调;并适用于位置、…

同时支持RTSP/ONVIF/GB28181的平台哪里找?来看EasyGBS!

同时支持RTSP/ONVIF/GB28181的平台哪里找?来看EasyGBS!还在到处找能同时兼容RTSP/ONVIF/GB28181的视频平台?翻了半天不是缺这个协议、就是用着麻烦,真的太费时间!其实根本不用这么折腾,EasyGBS早就把这三大主流协…