rust中async/await的使用

在Rust中,async/await 用于编写异步代码。它允许您以同步的方式编写异步代码,使得异步操作更易于理解和编写。

安装依赖:

bash 复制代码
cargo add futures
cargo add async-std

使用示例:

示例1:
rust 复制代码
use async_std::task::block_on;

fn main() {
    block_on(hello());
}

async fn hello() {
    println!("hello , world!!!");
}
示例2:
rust 复制代码
use std::time::Duration;

use async_std::task::{block_on, sleep};

fn main() {
    let future = hello();

    block_on(future); // 会阻塞线程等待异步任务完成
    println!("hello main");
}

async fn hello() {
    println!("hello , world!!!");
    // 使用async_std运行时的sleep,不要使用线程的sleep,睡眠3秒
    sleep(Duration::from_secs(3)).await;
}
示例3:

async代码块:

rust 复制代码
use std::{future::Future, time::Duration};

use async_std::task::{block_on, sleep};

fn main() {
    let future = hello();

    block_on(future); // 会阻塞线程等待异步任务完成
    println!("hello main");
}

fn hello() -> impl Future<Output = ()> {
    async {
        println!("hello , world!!!");
        // 使用async_std运行时的sleep,不要使用线程的sleep,睡眠3秒
        sleep(Duration::from_secs(3)).await;
    }
}

使用await:

使用await,

它只能在async函数或者async代码块中用,

它会等待Future代码直到完成,

它不会阻塞当前线程,线程还可以执行其他的Future

rust 复制代码
use std::time::Duration;

use async_std::task::{block_on, sleep};

fn main() {
    block_on(order());
}

async fn cook() -> String {
    sleep(Duration::from_secs(3)).await;
    "糖醋排骨".to_string()
}

async fn order() {
    println!("来一份糖醋排骨!!!");
    let paigu = cook().await;
    println!("{:?}", paigu);
}
相关推荐
geovindu2 小时前
rust: Composite Pattern
开发语言·后端·设计模式·rust·组合模式
喵了几个咪9 小时前
RushWind Admin — 契约驱动:203 条路由零手写的工程化拆解
微服务·rust·开源·admin
Ramble_Naylor9 小时前
闭包与迭代器:函数式写法
rust
喵了几个咪13 小时前
Go 写业务,Rust 扛底盘:一套可落地的混合架构
微服务·架构·golang·rust·多租户·gowind·rushwind
对象存储与RustFS1 天前
升级 RustFS 二进制不停机:一条一条换,留一条退路
后端·rust·开源
感谢地心引力1 天前
来试试我做的音乐播放器吧
ai·rust·音乐·navidrome·music·tarui
蚂蚁背大象1 天前
RocketMQ-Rust 1.0.0 发布:用 Rust 做消息队列,这次有哪些变化?
rust·开源·rocketmq
喵个咪1 天前
RushWind Admin — 用 Rust 写的企业级中后台,开源了
后端·rust·开源
喵个咪1 天前
RushWind Admin — 契约驱动:203 条路由零手写的工程化拆解
后端·rust·开源
喵个咪1 天前
Go 写业务,Rust 扛底盘:一套可落地的混合架构
后端·rust·go