rust中async/await的使用示例详解

 更新时间:2024年10月12日 09:26:48   作者:UDAIOT1000  
在Rust中,async/await用于编写异步代码,使得异步操作更易于理解和编写,通过使用await,在async函数或代码块中等待Future完成,而不会阻塞线程,允许同时执行其他Future,这种机制简化了异步编程的复杂性,使代码更加直观

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

安装依赖:

cargo add futures
cargo add async-std

使用示例:

示例1:

use async_std::task::block_on;
fn main() {
    block_on(hello());
}
async fn hello() {
    println!("hello , world!!!");
}

 示例2:

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代码块:

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

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);
}

到此这篇关于rust中async/await的使用的文章就介绍到这了,更多相关rust async/await使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 详解Rust编程中的共享状态并发执行

    详解Rust编程中的共享状态并发执行

    虽然消息传递是一个很好的处理并发的方式,但并不是唯一一个,另一种方式是让多个线程拥有相同的共享数据,本文给大家介绍Rust编程中的共享状态并发执行,感兴趣的朋友一起看看吧
    2023-11-11
  • Rust语言中级教程之指针

    Rust语言中级教程之指针

    Rust中共有三种类型的指针,分别为引用,解引用,智能指针,这篇文章主要介绍了Rust语言中级教程之指针,需要的朋友可以参考下
    2023-05-05
  • Rust中的Box<T>之堆上的数据与递归类型详解

    Rust中的Box<T>之堆上的数据与递归类型详解

    本文介绍了Rust中的Box<T>类型,包括其在堆与栈之间的内存分配,性能优势,以及如何利用Box<T>来实现递归类型和处理大小未知类型,通过Box<T>,Rust程序员可以更灵活地管理内存,避免编译时大小不确定的问题,并提高代码的效率和灵活性
    2025-02-02
  • rust中trait的使用方法详解

    rust中trait的使用方法详解

    trait用中文来讲就是特征,它就是一个标记,只不过这个标记被用在特定的地方,也就是类型参数的后面,下面我们就来学习一下trait的具体使用方法吧
    2023-12-12
  • Rust生成随机数的项目实践

    Rust生成随机数的项目实践

    Rust标准库中并没有随机数生成器,常见的解决方案是使用rand包,本文主要介绍了Rust生成随机数的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Rust 语言的全链路追踪库 tracing使用方法

    Rust 语言的全链路追踪库 tracing使用方法

    这篇文章主要介绍了Rust 语言的全链路追踪库 tracing,接下来就以 tracing 为例,介绍一下trace 的核心概念以及使用方法,需要的朋友可以参考下
    2022-12-12
  • 探索 Rust 中实用的错误处理技巧

    探索 Rust 中实用的错误处理技巧

    探索Rust中实用的错误处理技巧!Rust是一门静态类型系统安全且高效的编程语言,但使用过程中难免会遇到各种错误,学会如何正确处理这些错误至关重要,本指南将为您提供一些实用的错误处理技巧,帮助您更好地编写健壮的代码,需要的朋友可以参考下
    2024-01-01
  • Rust读取配置文件的实现

    Rust读取配置文件的实现

    本文主要介绍了Rust读取配置文件的实现,主要读取Cargo.toml文件,读取.env文件和读取自定义toml文件这三种,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Rust自定义安装路径的详细图文教程

    Rust自定义安装路径的详细图文教程

    工欲善其事必先利其器,无论是对小白还是大神来说,想要学习 Rust 第一步那必须是 Rust 的环境配置,下面这篇文章主要给大家介绍了关于Rust自定义安装路径的详细图文教程,需要的朋友可以参考下
    2023-03-03
  • Rust中的panic定义及触发条件详解

    Rust中的panic定义及触发条件详解

    这篇文章主要为大家介绍了Rust中的panic定义及触发条件详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04

最新评论