Rust异步编程:完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Rust中的异步编程:从基础到高级技术



现代应用程序需要高性能和高效的I/O操作处理。Rust以其速度和安全性著称,提供了强大的异步编程模型。在本指南中,我们将详细讲解如何使用async/await、tokio库以及其他工具来创建快速可靠的异步程序。



什么是Rust中的异步编程?



异步编程是一种允许在不创建OS线程的情况下同时执行多个任务的范式。当等待I/O(读取文件、HTTP请求)时,异步函数不会阻塞线程,而是"暂停"并将控制权交给其他任务。Rust通过Futures和async/await机制实现这一点。



关键概念:

  • Future — 一个trait,表示可能稍后完成的异步操作。
  • async/await — 用于处理Futures的语法糖。
  • Runtime(执行器) — 轮询Futures并驱动它们执行的运行时环境。最流行的是Tokio。
  • Task — 由Runtime管理的轻量级工作单元。


第一个Rust异步程序



首先,在Cargo.toml中添加依赖:



[dependencies]tokio = { version = "1", features = ["full"] }reqwest = { version = "0.12", features = ["json"] }serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"


现在编写一个简单的异步HTTP客户端:



use reqwest;use serde::Deserialize;

#[derive(Deserialize, Debug)]struct Todo { userId: u32, id: u32, title: String, completed: bool,}

#[tokio::main]async fn main() -> Result<(), Box> { // 异步GET请求 let response = reqwest::get("https://jsonplaceholder.typicode.com/todos/1") .await?; // await暂停执行,直到收到响应 let todo: Todo = response.json().await?; // 异步反序列化 println!("获取到的任务: {:#?}", todo); Ok(())}


注意宏#[tokio::main] — 它将普通的main函数转换为异步入口点,并启动Tokio运行时。



创建异步函数和处理任务



你可以使用关键字async fn创建自己的异步函数:



use std::time::Duration;use tokio::time::sleep;

async fn simulate_work(id: u32, duration_secs: u64) -> String { println!("任务 {} 开始", id); sleep(Duration::from_secs(duration_secs)).await; // 异步延迟 println!("任务 {} 完成", id); format!("任务 {} 的结果", id)}

#[tokio::main]async fn main() { let start = std::time::Instant::now(); // 创建异步任务(tasks) let task1 = tokio::spawn(simulate_work(1, 2)); let task2 = tokio::spawn(simulate_work(2, 1)); let task3 = tokio::spawn(simulate_work(3, 3)); // 等待所有任务完成 let results = tokio::join!(task1, task2, task3); // 处理结果 for result in &results { match result { Ok(msg) => println!("{}", msg), Err(e) => eprintln!("错误: {}", e), } } println!("总耗时: {:?}", start.elapsed()); // 大约3秒完成,而不是6秒!}


函数tokio::spawn创建一个独立的异步任务,与其他任务并行执行。tokio::join!等待所有传入的futures完成。



高级技术

博客

书籍推荐