src/concurrency/async/async-await.md
async/awaitAt a high level, async Rust code looks very much like "normal" sequential code:
# // Copyright 2024 Google LLC
# // SPDX-License-Identifier: Apache-2.0
#
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));
}
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 main async, without additional instructions to the compiler
on how to use the returned future.
You need an executor to run async code. block_on blocks the current thread
until the provided future has run to completion.
.await asynchronously waits for the completion of another operation. Unlike
block_on, .await doesn't block the current thread.
.await can only be used inside an async function (or block; these are
introduced later).