## 概要 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が動いて出力される } ```