1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-04-01 17:34:25 +02:00
Martin Geisler 5d292377a0
Remove outdated note about showing type of future (#2442)
Modern Rust just says “note: calling an async function returns a
future” and hides the `Future` type.
2024-10-18 09:02:53 +02:00

1.1 KiB

minutes
6

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));
}

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).