Junior
Wie funktioniert das Schlüsselwort await in der asynchronen Programmierung in Flutter?
sobes.tech KI
Antwort von AI
Das Schlüsselwort await wird in asynchronen Funktionen (markiert durch das Schlüsselwort async) verwendet, um die Ausführung der Funktion anzuhalten, bis der Future abgeschlossen ist und ein Ergebnis zurückgibt.
Funktionsprinzip:
- Wenn die Ausführung die Zeile mit
awaiterreicht, wird die aktuelle Funktion pausiert. - Die Kontrolle wird an den aufrufenden Code (oder die Ereignisschleife) zurückgegeben, wodurch andere Teile des Programms ausgeführt werden können. Dies verhindert, dass die Benutzeroberfläche blockiert wird.
- Wenn der
Future, auf den sichawaitbezieht, abgeschlossen ist (d.h. seine asynchrone Operation ausführt und einen Wert zurückgibt oder eine Ausnahme wirft), wird die pausierte Funktion an der Stelle wieder aufgenommen, an der sie unterbrochen wurde. - Wenn der
Futureerfolgreich abgeschlossen wurde, wird der vomFuturezurückgegebene Wert zum Ergebnis des Ausdrucksawait. - Wenn der
Futuremit einem Fehler beendet wurde (eine Ausnahme geworfen hat), wird diese Ausnahme an der Stelle geworfen, an derawaitaufgerufen wurde.
Beispiel:
// Asynchrone Funktion, markiert mit async
Future<String> fetchData() async {
// Simulation einer asynchronen Operation (z.B. eine Netzwerk-Anfrage)
await Future.delayed(Duration(seconds: 2));
return 'Daten aus dem Netzwerk empfangen!';
}
void main() async {
print('Beginn der Datenabfrage...');
// Verwendung von await, um auf das Ende des Future zu warten
try {
String data = await fetchData();
print('Empfangen: $data');
} catch (e) {
print('Fehler beim Datenempfang: $e');
}
print('Programm beendet (obwohl await noch laufen kann)');
}
In diesem Beispiel ist main als async markiert, um await verwenden zu können. Der Aufruf await fetchData() pausiert die Ausführung von main für 2 Sekunden, ohne den Haupt-UI-Thread zu blockieren. Während fetchData wartet, können andere Teile der Anwendung weiterarbeiten. Sobald fetchData abgeschlossen ist, wird die Ausführung von main fortgesetzt, und die Variable data erhält den zurückgegebenen Wert.