Junior
Come funziona la parola chiave await nella programmazione asincrona su Flutter?
sobes.tech AI
Risposta dell'AI
La parola chiave await viene utilizzata nelle funzioni asincrone (marcate con la parola chiave async) per sospendere l'esecuzione della funzione fino a quando il Future non si completa e restituisce un risultato.
Principio di funzionamento:
- Quando l'esecuzione raggiunge la riga con
await, la funzione corrente viene sospesa. - Il controllo viene restituito al codice chiamante (o al ciclo di eventi), consentendo ad altre parti del programma di essere eseguite. Questo impedisce di bloccare l'interfaccia utente.
- Quando il
Futurea cui si riferisceawaitsi completa (cioè, esegue la sua operazione asincrona e restituisce un valore o lancia un'eccezione), la funzione sospesa riprende da dove era stata interrotta. - Se il
Futuresi è completato con successo, il valore restituito dalFuturediventa il risultato dell'espressioneawait. - Se il
Futuresi è concluso con un errore (ha lanciato un'eccezione), questa eccezione verrà lanciata nel punto in cui è stato chiamatoawait.
Esempio:
// Funzione asincrona marcata con async
Future<String> fetchData() async {
// Simulazione di un'operazione asincrona (ad esempio, richiesta di rete)
await Future.delayed(Duration(seconds: 2));
return 'Dati ricevuti dalla rete!';
}
void main() async {
print('Inizio del recupero dati...');
// Uso di await per attendere il completamento del Future
try {
String data = await fetchData();
print('Ricevuto: $data');
} catch (e) {
print('Errore nel recupero dati: $e');
}
print('Programma terminato (anche se await potrebbe ancora essere in esecuzione)');
}
In questo esempio, main è marcata come async per poter usare await. La chiamata await fetchData() sospende l'esecuzione di main di 2 secondi, senza bloccare il thread principale dell'interfaccia utente. Mentre fetchData aspetta, altre parti dell'applicazione possono continuare a funzionare. Quando fetchData termina, l'esecuzione di main riprende, e la variabile data riceve il valore restituito.