rust 同时处理多个异步任务,并在一个任务完成退出

use std::thread;
use tokio::{sync::mpsc,time::{sleep, Duration},
};async fn check_for_one() {// 该函数会每秒打印一次 "write"loop {println!("write");sleep(Duration::from_secs(1)).await;}
}async fn start_print_task() -> Result<(), ()> {// 在新线程中运行 Tokio 运行时thread::spawn(move || {// 创建一个新的 Tokio 运行时let rt = tokio::runtime::Runtime::new().unwrap_or_else(|e| panic!("Failed to create Tokio runtime: {}", e));// 使用 Tokio 运行时执行异步任务rt.block_on(async move {check_for_one().await;});});// 返回一个已完成的 Future,方便配合 select! 使用sleep(Duration::from_secs(1)).await;Ok::<(), ()>(())
}#[tokio::main]
async fn main() {// 创建一个只发送“信号”的通道,类型为 ()let (tx, mut rx) = mpsc::channel::<()>(1);// 启动打印任务,返回一个 Futurelet print_task = start_print_task();// 启动另一个异步任务,2 秒后向通道发送“信号”tokio::spawn(async move {sleep(Duration::from_secs(2)).await;let _ = tx.send(()).await;});// 使用 tokio::select! 监听tokio::select! {val = rx.recv() => {match val {Some(_) => println!("rx1 completed first with signal"),None => println!("rx1 channel closed"),}}_ = print_task => {println!("start_print_task completed");}}println!("main thread exiting");
}

使用select!宏 ,来完成 只要有一个异步任务完成,就会退出异步监听。

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

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

相关文章

“群芳争艳”:CoreData 4 种方法计算最大值的效率比较(上)

概览 在 CoreData 支持的 App 中&#xff0c;一种常见操作就是计算数据库表中指定字段的最大值&#xff08;或最小值&#xff09;。就是这样一种看起来“不足挂齿”的任务&#xff0c;可能稍不留神就会“马失前蹄”。 在实际的代码中&#xff0c;我们怎样才能既迅速又简洁的…

skynet网络包库(lua-netpack.c)的作用解析

目录 网络包库&#xff08;lua-netpack.c&#xff09;的作用解析1. 数据包的分片与重组2. 网络事件处理3. 内存管理4. 数据打包与解包 动态库&#xff08;.so&#xff09;在 Lua 中的使用1. 编译为动态库2. Lua 中加载与调用(1) 加载模块(2) 核心方法(3) 使用示例 3. 注意事项 …

计科数据库第二次上机操作--实验二 表的简单查询

一、建数据库和表 1&#xff0e;启动数据库服务软件 Navicat 2&#xff0e;在 Navicat 中建立数据库 test 3. 在test数据库上建立teacher表&#xff1a; 二、基本查询 2.1 从teacher表中分别检索出教师的所有信息 SELECT * FROM teacher WHERE 教工号2000; SELECT * FROM t…

WPF依赖注入

一、IOC 在 WPF 中的原理 控制反转&#xff08;IOC&#xff09;是一种设计原则&#xff0c;它将对象的创建和依赖关系的管理从对象本身转移到外部容器&#xff08;IOC 容器&#xff09;。在传统的编程方式中&#xff0c;一个对象如果需要使用另一个对象&#xff08;即存在依赖…

【大模型深度学习】如何估算大模型需要的显存

一、模型参数量 参数量的单位 参数量指的是模型中所有权重和偏置的数量总和。在大模型中&#xff0c;参数量的单位通常以“百万”&#xff08;M&#xff09;或“亿”&#xff08;B&#xff0c;也常说十亿&#xff09;来表示。 百万&#xff08;M&#xff09;&#xff1a;表示…

BUUCTF流量分析题

文章目录 前言wireshark被嗅探的流量被偷走的文件easycap数据包中的线索秘密文件[安洵杯 2019]Attack (难&#xff0c;没写)被劫持的神秘礼物大流量分析&#xff08;一&#xff09;大流量分析&#xff08;二&#xff09;大流量分析&#xff08;三&#xff09;模板模板 前言 CT…

adb检测不到原来的设备List of devices attached解决办法

进设备管理器-通用串行总线设备 卸载无法检测到的设备驱动 重新拔插数据线

mapbox基础,加载栅格图片到地图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️raster 栅格图层 api二、🍀使用本地载…

复活之我会二分

文章目录 整数二分模板模板1&#xff1a;满足条件的第一个数模板2&#xff1a;满足条件的最后一个数 浮点数二分模板一、Building an Aquarium思路分析具体代码 二、Tracking Segments思路分析具体代码 三、Wooden Toy Festival思路分析具体代码 四、路标设置思路分析具体代码 …

每日c/c++题 备战蓝桥杯(握手问题)

试题 A: 握手问题 题解 题目描述 小蓝组织了一场算法交流会议&#xff0c;共有50人参加。按照惯例&#xff0c;每个人都要与除自己外的其他所有人握手一次。但有7个人彼此之间没有握手&#xff08;这7人与其他43人正常握手&#xff09;。求实际发生的握手总次数。 解题思路 …

mysql8.0.29 win64下载

mysql win64安装包 mysql win64安装包下载 mysql win64安装包下载 通过网盘分享的文件&#xff1a;mysql 链接: https://pan.baidu.com/s/1sEOl-wSVtOG5gfIRdt5MXw?pwdgi7i 提取码: gi7i

browser-use开源程序使 AI 代理可以访问网站,自动完成特定的指定任务,告诉您的计算机该做什么,它就会完成它。

一、软件介绍 文末提供程序和源码下载 browser-use开源程序使 AI 代理可以访问网站&#xff0c;自动完成特定的指定任务&#xff0c;浏览器使用是将AI代理与浏览器连接的最简单方法。告诉您的计算机该做什么&#xff0c;它就会完成它。 二、快速开始 使用 pip &#xff08;Py…

CAD格式转换器:Acme CAD Converter

Acme CAD Converter 是一款专业的多功能 CAD 文件管理工具&#xff0c;支持 ‌DWG/DXF/DWF 文件查看、批量格式转换及版本降级‌&#xff0c;适用于工程设计、图纸归档等场景‌。软件兼容 AutoCAD R2.5 至 2023 版本文件‌&#xff0c;可输出为 PDF、JPEG、TIFF、SVG 等 20 格式…

vmware虚拟机上Ubuntu或者其他系统无法联网的解决方法

一、检查虚拟机是否开启了网络服务 打开方式&#xff1a;控制面板->-管理工具--->服务 查找 VMware DHCP Service 和VMware NAT Service &#xff0c;确保这两个服务已经启动。如下图&#xff0c;没有启动就点击启动。 二、设置网络类型 我们一般使用前两种多一些&…

数据结构与算法:基础与进阶

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C语言的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享给更…

使用分布式锁和乐观锁解决超卖问题

在电商、秒杀等高并发场景中&#xff0c;“超卖”问题指库存被过量扣减&#xff0c;导致实际库存不足。以下是使用 分布式锁 和 乐观锁 解决超卖问题的原理与实现方案&#xff1a; 一、超卖问题的核心原因 多个并发请求同时读取库存余量&#xff0c;并在本地计算后发起写操作&…

盛水最多的容器

本题有两种解法&#xff0c;一种是暴力解法&#xff0c;直接暴力枚举出所有的体积比较出最大的即可&#xff0c;但是时间复杂度达到n方。超出了限制&#xff0c;另一种解法就是利用单调性解法&#xff0c;我们着重介绍一下单调性解法。 单调性解法&#xff1a; 体积vh*w&…

操作系统概述(3)

批处理系统 1.单道批处理系统 单道批处理系统是成批地处理作用&#xff0c;并且始终只有一道作业在内存中的系统。优点&#xff1a;提高系统资源的利用率和系统吞吐量。缺点&#xff1a;系统中的资源得不到充分利用。 2.多道批处理系统 引入多道程序设计技术&#xff0c;是…

数字身份DID协议:如何用Solidity编写去中心化身份合约

本文提出基于以太坊的自主主权身份&#xff08;SSI&#xff09;实现方案&#xff0c;通过扩展ERC-734/ERC-735标准构建链上身份核心合约&#xff0c;支持可验证声明、多密钥轮换、属性隐私保护等特性。设计的三层架构体系将身份控制逻辑与数据存储分离&#xff0c;在测试网环境…

【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解

【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解前言YOLOV2的模型结构YOLOV2模型的基本执行流程YOLOV2模型的网络参数YOLOV2模型的训练方式 YOLOV2的核心思想前向传播阶段反向传播阶段 总结 前…