Ce face TimeoutException
Future.timeout și Stream.timeout aruncă TimeoutException când timpul expiră. Excepția are un mesaj opțional (message) și durata depășită (duration).
O poți arunca și tu, în propriile funcții, când o operație nu se termină la timp. Ca orice excepție, se prinde cu on TimeoutException catch (e).
Parametri
| Parametru | Descriere |
|---|---|
message |
Descrierea problemei (poate fi null). |
duration |
Opțional: timpul care a fost depășit. |
Ce returnează
Un obiect excepție; toString() include mesajul și durata.
Exemple
Exemplul 1: Prinderea și citirea câmpurilor
import 'dart:async';
Future<void> main() async {
try {
await Future.delayed(const Duration(seconds: 1)).timeout(const Duration(milliseconds: 100));
} on TimeoutException catch (e) {
print('mesaj: ${e.message}');
print('durată: ${e.duration}');
}
}
Rezultat
mesaj: Future not completed
durată: 0:00:00.100000
Exemplul 2: Aruncată din propriul cod
import 'dart:async';
Future<String> asteaptaConfirmare(int incercari) async {
for (var i = 1; i <= incercari; i++) {
await Future.delayed(const Duration(milliseconds: 10));
print('încercarea $i: fără răspuns');
}
throw TimeoutException('plata nu a fost confirmată', const Duration(milliseconds: 30));
}
Future<void> main() async {
try {
await asteaptaConfirmare(3);
} on TimeoutException catch (e) {
print(e);
}
}
Rezultat
încercarea 1: fără răspuns
încercarea 2: fără răspuns
încercarea 3: fără răspuns
TimeoutException after 0:00:00.030000: plata nu a fost confirmată
Greșeli frecvente
- Prinzi cu
on Exceptionși pierzi informația despre timp. Prinde întâion TimeoutException, apoi celelalte excepții.
Comenzi înrudite
Future.timeout: Limitează cât aștepți un future: după timpul dat, aruncă TimeoutException sau folosește onTimeout.Stream.timeout: Emite o eroare TimeoutException (sau cheamă onTimeout) dacă între două valori trece mai mult decât timpul dat.Exception: Interfața pentru probleme așteptate, pe care programul le poate trata: date greșite, fișier lipsă, rețea căzută.