佬们,最近在学习 rust 异步编程,rust 圣经里面有这一句话: <font color=blue>总之,在 async fn 函数中使用.await 可以等待另一个异步调用的完成。但是与 block_on 不同,.await 并不会阻塞当前的线程,而是异步的等待 Future A 的完成,在等待的过程中,该线程还可以继续执行其它的 Future B ,最终实现了并发处理的效果。</font>
然后我就试了一下下面的这个用例,我预想的结果是 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);
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.