Dart Futureクラスstatic wait()メソッド

シェルスクリプト Dart

Dart Futureクラスのstatic wait()メソッドについてメモ書き。

wait()は複数のFutureの実行結果を取得するstaticメソッド。
wait()の戻り値はFuture<List<T>>となっており、Futureの実行結果は配列で返される。
第1引数で実行結果を取得するFutureを配列で受け取る。
第2引数はbool型名前付きオプション引数「eagerError:」で、trueを指定するといずれかのFutureがエラーになると即座に終了する。falseを指定すると完了を待ってから終了する。デフォルトはfalse。
第3引数はvoid型名前付きオプション引数「cleanUp:」。「cleanUp:」はエラー時に使用される。wait()で複数のFuture処理を実行し、そのうちの一つがエラーになると成功したFutureはリソースを解放せずに終了してしまう。「cleanUp:」を使用する事で成功したFutureの戻り値を受け取り、リソースを解放することができる。
第2、第3引数はオプション引数なので省略可能。

コーディングで動きを確認。
testTime1()関数とtestTime2()関数をwait()の引数として指定し、実行結果を出力する。

void main() async {
  var val = await Future.wait([testTime1(), testTime2()]);
  for (var element in val) {
    print(element);
  }
}

Future<String> testTime1() async {
  await Future.delayed(Duration(seconds: 1));
  return "testTime1";
}

Future<String> testTime2() async {
  await Future.delayed(Duration(seconds: 2));
  return "testTime2";
}

実行結果。

testTime1
testTime2

次はtestTime1()関数で意図的にエラーを発生させ、testTime2()関数は正常終了させる。
引数として「eagerError:false 」と「cleanUp:」を追加する。

void main() async {
  try {
    var val = await Future.wait(
      [testTime1(), testTime2()],
      eagerError: false,
      cleanUp: (successValue) {
        print(successValue);
      },
      // ignore: body_might_complete_normally_catch_error
    ).catchError((err) {



📁 Dart Futureクラスの全体像・主要メソッド
Futureクラスの非同期処理や主要メソッド一覧は、以下の解説マップをご覧ください。
➔ Dart Futureクラスの使い方:非同期処理と主要メソッド解説マップ

コメント

タイトルとURLをコピーしました