Junior
Hogyan működik az await kulcsszó az aszinkron programozásban Flutteren?
sobes.tech MI
Válasz az MI-től
A await kulcsszó olyan aszinkron függvényekben használható, amelyeket az async kulcsszóval jelöltek, és megállítja a függvény végrehajtását addig, amíg a Future be nem fejeződik és eredményt nem ad vissza.
Működési elv:
- Amikor a végrehajtás eléri az
await-tel ellátott sort, az aktuális függvény szünetel. - A vezérlés visszatér a hívó kódhoz (vagy az eseményhurokhoz), lehetővé téve más részek futtatását a programban. Ez megakadályozza a UI blokkolását.
- Amikor a
Future, amelyre azawaithivatkozik, befejeződik (azaz végrehajtja az aszinkron műveletet és értéket ad vissza vagy kivételt dob), a felfüggesztett függvény folytatódik ott, ahol megszakadt. - Ha a
Futuresikeresen befejeződött, aFutureáltal visszaadott érték lesz azawaitkifejezés eredménye. - Ha a
Futurehibával végződik (kivételt dob), akkor ez a kivétel ott lesz dobva, ahol azawait-et hívták.
Példa:
// Aszinkron függvény, amelyet az `async`-szal jelöltek
Future<String> fetchData() async {
// Aszinkron művelet szimulációja (pl. hálózati kérés)
await Future.delayed(Duration(seconds: 2));
return 'Adatok a hálózatról!';
}
void main() async {
print('Adatok lekérése kezdődik...');
// Az `await` használata a Future befejezésének várására
try {
String data = await fetchData();
print('Kapott: $data');
} catch (e) {
print('Hiba az adatok lekérése során: $e');
}
print('A program befejeződött (bár az await még futhat)');
}
Ebben a példában a main async-ként van megjelölve, hogy használhassa az await-et. A await fetchData() hívás 2 másodpercre megállítja a main végrehajtását, anélkül, hogy blokkolná a fő UI szálat. Míg a fetchData vár, más részek a programban tovább működhetnek. Amint a fetchData befejeződik, a main végrehajtása folytatódik, és a data változóhoz az eredmény kerül.