Future.waitと並列処理
複数のFutureを同時に実行する
「Future.waitと並列処理」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。
1つずつawaitすると遅い
Futureを順番にawaitすると、前の処理が終わるまで次が待機します。1秒かかる呼び出しを3回行うと、合計で3秒かかります。
まとめて開始する
独立した非同期呼び出しを先に開始し、その後でawaitします。処理は同時並行で進むため、合計時間は合計ではなく、最も遅い処理に左右されます。
Future.waitを使う
Future.waitはFutureのリストを受け取り、すべての処理が完了したときに完了する1つのFutureを返します。
final results = await Future.wait([a(), b(), c()]);結果の順序は維持される
Future.waitは、どのFutureが先に完了したかに関係なく、入力されたFutureと同じ順序の結果のリストを返します。
final list = await Future.wait([one(), two()]);
print(list[0]); // result of one()実際の時間短縮
1秒かかるFutureを3つ並行して実行すると、Future.waitが待機時間を重ね合わせるため、約1秒で同時に完了します。
1つが失敗した場合
デフォルトでは、いずれかのFutureでエラーが発生すると、ほかの処理が実行中でもFuture.waitは直ちにそのエラーで完了します。
eagerErrorで処理を続ける
eagerError: falseを渡すと、Future.waitはすべてのFutureが完了するまで待ってから、最初に発生したエラーを報告します。
await Future.wait(tasks, eagerError: false);Future.anyで競争させる
最も速い結果だけが必要ですか?Future.anyは、リスト内で最初に成功したFutureが完了すると、すぐに完了します。
final fastest = await Future.any([mirrorA(), mirrorB()]);リストを作成する
よく使うパターンは、入力値に対してmapを使ってFutureのリストを作成し、そのままFuture.waitに渡す方法です。
await Future.wait(ids.map(fetchUser));並行処理であり、並列スレッドではない
これは1つのisolate上での並行処理です。イベントループが待機中の処理を交互に進めます。CPU負荷の高い処理にはisolateを使います。
使い分ける方法
すべての結果が必要な場合はFuture.waitを使い、最初に届いた結果だけが必要な場合はFuture.anyを使います。⚖️
クイックチェック
Futureをまとめて実行する方法を確認しましょう。
まとめ:並行Future
すべての結果にはFuture.wait、最速の結果にはFuture.anyを使って非同期処理を重ねる方法と、エラーの動作を学びました。🏁
よくある質問
「Future.waitと並列処理」レッスンは無料ですか?
はい。「Future.waitと並列処理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。
「Future.waitと並列処理」で何を学びますか?
複数のFutureを同時に実行する ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Dart Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Future.waitと並列処理」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDart Academyレッスンでコードを書いて実行できますか?
はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- イベントループとマイクロタスク
- Futureの作成とawait
- asyncコードのエラーハンドリング
- Future.waitと並列処理