async
/await
从高层次上看,异步 Rust 代码与“正常”的顺序代码非常类似:
use futures::executor::block_on; async fn count_to(count: i32) { for i in 1..=count { println!("Count is: {i}!"); } } async fn async_main(count: i32) { count_to(count).await; } fn main() { block_on(async_main(10)); }
关键点:
-
请注意,这只是一个简单的示例,用于展示语法。其中没有长时间运行的操作或任何真正的并发!
-
异步调用的返回类型是什么?
- 在
main
中使用let future: () = async_main(10);
来查看类型。
- 在
-
“async” 关键字是语法糖。编译器会将返回类型替换为 future。
-
你不能将
main
声明为异步函数,除非在编译器中加入额外的指令来告诉它如何使用返回的 future。 -
你需要一个执行器来运行异步代码。
block_on
会阻塞当前线程,直到提供的future完成为止。 -
.await
会异步地等待另一个操作的完成。与block_on
不同,.await
不会阻塞当前线程。 -
.await
只能在async
函数(或块,这些稍后会介绍)中使用。