timeout — абстрактный метод
Прекратите ожидать этот 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