rust 同时处理多个异步任务

rust 复制代码
use tokio::{sync::oneshot, time::{sleep, Duration}};

async fn check_for_one() {
    // This loop will continuously print "write" every second until interrupted
    loop {
        println!("write");
        sleep(Duration::from_secs(1)).await; // Non-blocking sleep in async context
    }
}

#[tokio::main]
async fn main() {
    // Create a oneshot channel
    let (tx1, rx1) = oneshot::channel::<&str>();

    // Spawn a task that sends a message after 2 seconds
    tokio::spawn(async move {
        sleep(Duration::from_secs(2)).await;    
        let _ = tx1.send("one");
    });

    // Use tokio::select! to wait for either the print task or the message on rx1
    tokio::select! {
        _ = check_for_one() => {
            // This branch will continuously print "write" every second
            println!("check_for_one completed");
        }
        val = rx1 => {
            // This branch will be executed once the message is received from rx1
            match val {
                Ok(val) => println!("rx1 completed first with {:?}", val),
                Err(e) => println!("Failed to receive from rx1: {:?}", e),
            }
        }
    }

    println!("main thread exiting"); 
}

只要有一个异步任务完成,就会退出select! 。

相关推荐
22:30Plane-Moon几秒前
SQL 查询语法笔记
数据库·笔记·sql
你可以叫我仔哥呀2 分钟前
Java程序员学从0学AI(七)
java·开发语言·人工智能·ai·spring ai
杨DaB21 分钟前
【SpringMVC】MVC中Controller的配置 、RestFul的使用、页面重定向和转发
java·笔记·后端·学习·spring·mvc·restful
linyb极客之路25 分钟前
干货来袭!5 分钟学会快速实现责任链,效率直接拉满!
java
创码小奇客29 分钟前
保姆级 Talos 超参数优化实战指南:从入门到封神
java·后端·架构
青云交36 分钟前
Java 大视界 -- Java 大数据在智能安防入侵检测系统中的多源数据融合与误报率降低策略(369)
java·大数据·入侵检测·智能安防·多源数据融合·误报率降低·视频语义理解
望获linux44 分钟前
【Linux基础知识系列】第六十四篇 - 了解Linux的硬件架构
linux·运维·服务器·开发语言·数据库·操作系统·嵌入式软件
我会冲击波1 小时前
告别手写注释!变量命名、注释IDEA插件更新了,AI帮你搞定一切代码注释
java·intellij idea
全栈小51 小时前
【数据库】使用Sql Server将分组后指定字段的行数据转为一个字段显示,并且以逗号隔开每个值,收藏不迷路
数据库·sql server
BUG创建者1 小时前
openlayer根据不同的状态显示不同的图层颜色
android·java·javascript