Dart言語における非同期処理の重要概念:Async & Await
このトピックを議論する前に、「同期的」と「非同期的」プログラム実行について理解しておく必要があります。

同期プログラミング:
同期プログラミングでは、プログラムが逐次的に行ごとに実行されます。
- 同じタイミングでプログラムが実行され、行ごとに進行します。
- 関数を呼び出すと、その関数が戻るまで、または関数の処理が完了するまで、次のステートメントは実行されません。
例を見てみましょう:
ステートメント1..... 実行
関数(); // 1s 2s 3s 4s.... 実行
ステートメント2 ..... 実行
ステートメント3 ..... 実行
非同期プログラミング:
非同期プログラミングでは、プログラムが逐次的に実行されるわけではありません。
- 関数を呼び出しても、その関数の処理が完了するのを待たずに、次のステートメントが実行されます。
例を見てみましょう:
ステートメント1... // 実行
関数() // 待機
ステートメント2 ... // 完了
ステートメント3 ... // 完了

さて、本題に戻りましょう。asyncとは、関数が結果を取得するのに時間がかかる可能性があることを意味します。一方、awaitは、async関数が完了するまで通常のフローをブロックし、次の指示やステートメントの実行を停止します。そして、asyncメソッドの処理が完了すると、awaitが待機していたコードの実行を再開します。たとえば、APIサーバーからデータをリクエストする場合、そのリクエストがサーバーからのレスポンスを待つ間、プログラムは他のステートメントを実行し続けます。Dartでは、非同期操作を行うためにFutureクラスとasyncおよびawaitキーワードを使用します。
では、なぜasyncはそれほど重要なのか?
asyncは非常に重要な機能です。なぜなら、asyncはFutureタイプのデータを処理しながら、他の作業を完了するのを助けてくれるからです。その結果、プログラムの実行時間が節約され、ソフトウェアのパフォーマンスが向上します。一般的な非同期操作の例としては以下のものがあります:
- ネットワーク経由でデータを取得する。
- データベースに書き込む。
- ファイルからデータを読み取る。