TimeoutException în Dart

Excepția aruncată când un Future sau un Stream nu a terminat în timpul dat cu timeout.

Sintaxă
import 'dart:async';

class TimeoutException implements Exception
TimeoutException(String? message, [Duration? duration])
final String? message
final Duration? duration

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âi on 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ă.