rust学习_异步编程

rust异步编程的基础概念 1.异步函数:使用async关键字定义一个异步函数,异步函数返回一个实现了Future特性的类型,这个Feature类型代表一个可能还未完成的计算
   Feature特性的类型:rust的Feature就像一个将来会完成的任务 或者 一个将来会实现的承诺
2.Future: 代表异步操作最终的结果。 
3.轮询:由异步运行(tokio 或 async-std)来管理  
4.任务调度器:管理多个任务执行 
异步编程的基本结构 1.定义异步函数
  async fn my_async_function() -> Result<String, std::io::Error> {
     Ok("Hello World".to_string())
  }

2.调用异步函数
  let result = my_async_function().await;
  解释:
    1.调用异步函数 实际上是在创建 Future
    2.Future代表了一个异步操作,但它本身不会立即开始执行
 
3.运行异步代码
   #[tokio::main]
   async fn main(){
      let result = my_async_function().await
      println!("{}",result.unwrap());
   }
  解释:
      1.要使第二步的Future开始执行,必须放入一个异步运行(Tokio,Async-Std等)
      2.异步运行时负责调度和执行这些Future 
异步流1.什么是异步流
  1.异步流就像是一个流水线,会不断给你发过来数据。而你每收到一条数据,就可以马上处理这条数据
  2.不需要等所有数据都到齐了再处理

2.为什么使用异步流
  1.节省内存:不一次性把所有数据放到内存
  2.提高效率:尽早处理已经接收的数据 不用等待所有数据都准备好

3.示例
  #[tokio::main]
  async fn main() {
     let mut message = receive_message();  //receive_message返回一个异步流 
    
      while let Some(message) = messages.next().await { //每次接收到一条消息,就可以立即处理这条消息
        match message {
            Ok(msg) => println!("收到消息: {}", msg),
            Err(e) => eprintln!("出错: {}", e),
        }
    }
  }
rust实现并发编程的方式1.使用 tokio::spawn 启动新的异步任务
2.使用 tokio::join! 等待多个任务完成
并发编程的示例1.定义异步函数
   use reqwest;

   async fn download_data(url: &str) -> Result<String, reqwest::Error> {
      let response = reqwest::get(url).await?;  //发起网络请求 使用.await等待请求完成
      response.text().await  //获取响应的文本内容
   }

2.启动多个异步任务
use tokio;

#[tokio::main]
async fn main() {
    let urls = vec![   //包含需要下载的URL
        "https://example.com/data1",
        "https://example.com/data2",
        "https://example.com/data3",
    ];

    let tasks: Vec<_> = urls.into_iter()
        .map(|url| tokio::spawn(download_data(url)))  //map方法遍历urls,每个url调用tokio::spawn启动一个新的异步任务
        .collect();  //返回JoinHandle  讲joinHandle收集到一个向量tasks

3.等待所有任务执行
    for task in tasks {
        match task.await { //返回一个Result<_,_> 表示任务的执行结果
            Ok(result) => match result {
                Ok(data) => println!("下载完成: {}", data),
                Err(e) => eprintln!("下载出错: {}", e),
            },
            Err(e) => eprintln!("任务出错: {}", e),
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

simper_zxb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值