async/await
At a high level, async Rust code looks very much like “normal” sequential code:
use futures::executor::block_on;async fn count_to(count: i32) {for i in 0..count {println!("Count is: {i}!");}}async fn async_main(count: i32) {count_to(count).await;}fn main() {block_on(async_main(10));}
This slide should take about 6 minutes.
Key points:
Note that this is a simplified example to show the syntax. There is no long running operation or any real concurrency in it!
The “async” keyword is syntactic sugar. The compiler replaces the return type with a future.
You cannot make
mainasync, without additional instructions to the compiler on how to use the returned future.You need an executor to run async code.
block_onblocks the current thread until the provided future has run to completion..awaitasynchronously waits for the completion of another operation. Unlikeblock_on,.awaitdoesn’t block the current thread..awaitcan only be used inside anasyncfunction (or block; these are introduced later).