rust 关于.await 的疑惑

19次阅读

共计 694 个字符,预计需要花费 2 分钟才能阅读完成。

佬们,最近在学习 rust 异步编程,rust 圣经里面有这一句话: 总之,在 async fn 函数中使用.await 可以等待另一个异步调用的完成。但是与 block_on 不同,.await 并不会阻塞当前的线程,而是异步的等待 Future A 的完成,在等待的过程中,该线程还可以继续执行其它的 Future B,最终实现了并发处理的效果。

然后我就试了一下下面的这个用例,我预想的结果是 kitty 和 snoopy 先输出,等待 5 秒后再输出 world, 但是结果是先输出 kitty,5s 后输出 snoopy, 再 5s 输出 world, 和文章中描述的好像不太对,请问这个 await 需要怎么理解?

use futures::executor::block_on;
use std::{thread, time};

async fn hello_world() {hello_cat().await;
    hello_dog().await;
    println!("hello, world!");
}

async fn hello_cat() {println!("hello, kitty!");
    let ten_millis = time::Duration::from_secs(5);
    thread::sleep(ten_millis);
}

async fn hello_dog() {println!("hello, snoopy!");
    let ten_millis = time::Duration::from_secs(5);
    thread::sleep(ten_millis);
}

fn main() {let future = hello_world();
    block_on(future);
}
正文完
 0