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! 。

相关推荐
5***g229几秒前
Ubuntu 系统下安装 Nginx
数据库·nginx·ubuntu
kesifan2 分钟前
JAVA异常处理的基本概念
java·开发语言
3***g2053 分钟前
SQL sever数据导入导出实验
数据库·sql·oracle
f***68606 分钟前
在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
数据库·django·sqlite
K***65896 分钟前
Tomcat下载,安装,配置终极版(2024)
java·tomcat
x***38167 分钟前
springboot整合最新版minio和minio的安装(完整教程,新人必看)
java·spring boot·后端
必胜刻9 分钟前
Go连接Mysql数据库
数据库·mysql·golang
通往曙光的路上10 分钟前
陪玩小项目努力
java
w***48110 分钟前
Maven Spring框架依赖包
java·spring·maven
汤姆yu11 分钟前
基于springboot的乡村信息建设管理系统
java·spring boot·后端