Spec-Zone.ru › Dart 2

dart:async

timeout — абстрактный метод

Future<T> timeout(
  1. Duration timeLimit,
  2. {FutureOr<T> onTimeout( )?}
)

Прекратите ожидать этот future, когда пройдет timeLimit.

Создает новый future с тайм-аутом, который завершается с тем же результатом, что и этот future, исходный future, если исходный future завершается вовремя.

Если исходный future не завершится до истечения timeLimit, выполняется действие onTimeout, и его результат (возвращенное значение или исключение) используется как результат future с тайм-аутом. Функция onTimeout должна возвращать T или Future<T>. Если onTimeout возвращает future, future альтернативного результата, для завершения future с тайм-аутом используется итоговый результат future альтернативного результата, даже если исходный future завершится раньше future альтернативного результата. Важно только то, что исходный future не завершился вовремя.

Если onTimeout не указано, тайм-аут приведет к завершению возвращенного future с ошибкой TimeoutException.

В любом случае исходный future все еще может нормально завершиться позднее. Просто его результат не будет использоваться как результат future с тайм-аутом, если он не завершится в пределах установленного времени.

Примеры:

void main() async {
  var result =
      await waitTask("completed").timeout(const Duration(seconds: 10));
  print(result); // Prints "completed" after 5 seconds.

  result = await waitTask("completed")
      .timeout(const Duration(seconds: 1), onTimeout: () => "timeout");
  print(result); // Prints "timeout" after 1 second.

  result = await waitTask("first").timeout(const Duration(seconds: 2),
      onTimeout: () => waitTask("second"));
  // Prints "second" after 7 seconds.

  try {
    await waitTask("completed").timeout(const Duration(seconds: 2));
  } on TimeoutException {
    print("throws"); // Prints "throws" after 2 seconds.
  }

  var printFuture = waitPrint();
  await printFuture.timeout(const Duration(seconds: 2), onTimeout: () {
    print("timeout");
  });
  // Prints "timeout" after 2 seconds.
  await printFuture;
  // Prints "printed" after additional 3 seconds.
}

// Returns [string] after five seconds.
Future<String> waitTask(String string) async {
  await Future.delayed(const Duration(seconds: 5));
  return string;
}

// Prints "printed" after five seconds.
Future<void> waitPrint() async {
  await Future.delayed(const Duration(seconds: 5));
  print("printed");
}

Реализация

Future<T> timeout(Duration timeLimit, {FutureOr<T> onTimeout()?});

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-async/Future/timeout.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API