## 概要
docs: https://async-book-ja.netlify.app/01_getting_started/04_async_await_primer.html
`async/.await` は通常の同期型のコードのように見える非同期関数を作成するための [[Rust MOC|Rust]] のビルトインツールである。
`async` はコードブロックを [[RustのFutureトレイト|Future trait]] を実装している [[ステートマシンとは|ステートマシン]] に変換する。逆に、[[JavaScript 非同期処理が必要な理由|同期関数]] でブロッキングするような関数を呼び出すと、スレッド全体が [[Node.jsのブロッキング|ブロッキング]] されてしまうが、ブロックされた [[RustのFutureトレイト|Future]] は [[スレッドとは|スレッド]] の制御をもたらして、他の [[RustのFutureトレイト|Future]] を実行できるようになる。
非同期関数の作成には `async fn` シンタックスを利用する。
```rust
async fn do_sth() {...}
```
`async fn` によってこの関数の返り値は [[RustのFutureトレイト|Future]] となる。[[RustのFutureトレイト|Future]] は次のように `executor` で実行する必要がある。
```rust
// block_onは提供されたfutureが完了するまで現在のスレッドをブロックする
use futures::executor::block_on;
async fn hello_world() {
println!("hello, world!");
}
fn main() {
let future = hello_world();
// ここでは何もprintされない
block_on(future);
// futureが動いて出力される
}
```