Sobes.tech
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:

  1. Amikor a végrehajtás eléri az await-tel ellátott sort, az aktuális függvény szünetel.
  2. 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.
  3. Amikor a Future, amelyre az await hivatkozik, 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.
  4. Ha a Future sikeresen befejeződött, a Future által visszaadott érték lesz az await kifejezés eredménye.
  5. Ha a Future hibával végződik (kivételt dob), akkor ez a kivétel ott lesz dobva, ahol az await-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.