Dart Futureクラスtimeout()メソッド

Dar言語StreamクラスtoSet()メソッドDart

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

timeout()はFutureのタイムアウト時間を制御するメソッド。
第1引数にタイムアウト時間をDurationで指定し、第2引数は名前付きオプション引数「onTimeout:」でタイムアウトした場合の処理を記述する。この場合、Future<T>かTを戻り値として返す必要がある。
第2引数を省略した場合、TimeoutExceptionを返す。

コーディングで確認。
以下ケースの場合、testTimeout()関数はFuture<String>を返すため、onTimeout:は戻り値としてStringを指定している。上記で記載している通り、Future<String>でもOK。

void main() {
  testTimeout()
      .timeout(
        Duration(seconds: 1),
        onTimeout: () {
          return "Timeoutしました。";
        },
      )
      .then((value) => print(value))
      .catchError((onError) {
        print(onError);
      });
}

Future<String> testTimeout() async {
  try {
    await Future.delayed(Duration(seconds: 2));
    return "処理を完了しました";
  } catch (e) {
    rethrow;
  }
}

実行結果。
testTimeout()関数は2秒かかるのに対して、タイムアウト値として1秒を指定しているためタイムアウトとして処理される。

Timeoutしました。

次はonTimeout:を削除する。
コードが見やすいようにtry-catch文も削除。

void main() {
  testTimeout()
      .timeout(
        Duration(seconds: 1),
      )
      .then((value) => print(value))
      .catchError((onError) {
    print(onError);
  });
}

Future<String> testTimeout() async {
  await Future.delayed(Duration(seconds: 2));
  return "処理を完了しました";
}

実行結果。
TimeoutExceptionが返る。

TimeoutException after 0:00:01.000000: Future not completed

コメント

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