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.pswp.cn/pingmian/75865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75865.shtml
英文地址,請注明出處:http://en.pswp.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的核心思想前向傳播階段反向傳播階段 總結 前…