Ce face unawaited
Uneori pornești o operație și nu vrei să aștepți rezultatul, de exemplu trimiterea unei statistici. unawaited(f) spune clar cititorului (și lint-ului unawaited_futures) că lipsa lui await este intenționată. Dacă future-ul se termină cu eroare, eroarea rămâne netratată.
f.ignore() merge mai departe: ignoră atât valoarea, cât și eroarea. Folosește-l doar pentru operații a căror reușită chiar nu contează.
Parametri
| Parametru | Descriere |
|---|---|
future |
Pentru unawaited: future-ul pe care nu-l aștepți. |
Ce returnează
Nimic (void), în ambele cazuri.
Exemple
Exemplul 1: Jurnal trimis în fundal
main nu așteaptă jurnalul, dar așteaptă mai mult decât durează acesta, ca să vezi că s-a terminat.
import 'dart:async';
Future<void> trimiteJurnal(String eveniment) async {
await Future.delayed(const Duration(milliseconds: 20));
print(' jurnal trimis: $eveniment');
}
Future<void> main() async {
print('Utilizatorul Ana s-a autentificat');
unawaited(trimiteJurnal('autentificare Ana'));
print('Afișez pagina principală');
await Future.delayed(const Duration(milliseconds: 50));
print('Sfârșit');
}
Rezultat
Utilizatorul Ana s-a autentificat
Afișez pagina principală
jurnal trimis: autentificare Ana
Sfârșit
Exemplul 2: ignore: o eroare care nu contează
Fără ignore(), eroarea netratată ar opri programul.
Future<void> preincarcaImagine(String url) async {
await Future.delayed(const Duration(milliseconds: 10));
throw Exception('imagine indisponibilă: $url');
}
Future<void> main() async {
preincarcaImagine('https://dexblog.ro/logo.png').ignore();
await Future.delayed(const Duration(milliseconds: 30));
print('Pagina merge și fără imaginea preîncărcată');
}
Rezultat
Pagina merge și fără imaginea preîncărcată
Greșeli frecvente
- Folosești
unawaitedpe o operație care poate eșua. Eroarea devine „netratată” și poate opri programul; tratează-o înăuntru cutry/catchsau foloseșteignore(). - Programul se termină înainte ca operația neașteptată să ruleze.
mainnu așteaptă future-urile pe care nu le-ai așteptat.
Comenzi înrudite
Future: O valoare care va fi gata mai târziu (citirea unui fișier, un răspuns de la server); o aștepți cu await.async și await: async marchează o funcție asincronă (întoarce Future), iar await așteaptă rezultatul unui Future fără să blocheze programul.runZonedGuarded: Rulează cod într-o zonă nouă și prinde toate erorile asincrone netratate din ea, cu o singură funcție.