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