Sobes.tech
Junior

Flutterдеги асинхрон программалоодо await ачкыч сөзү кандай иштейт?

sobes.tech AI

AIден жооп

await ачкыч сөзү асинхрондуу функцияларда (аны async ачкыч сөзү менен белгилегенде) колдонулат, функциянын иштөөсүн токтотуп, ал Future аяктап, натыйжасын кайтарганга чейин күтүүгө мүмкүндүк берет.

Ишке ашыруу принциби:

  1. await менен коштолгон сапка жеткенде, учурдагы функция токтоп калат.
  2. Башка программа бөлүктөрү иштей бериши үчүн башкаруу чакырган кодго (же event loop) кайтарылат. Бул UI блоктогонду алдын алат.
  3. await менен шилтемелеген Future аяктагандан кийин (анын асинхрондуу операциясы аяктап, маанисин кайтарганда же исключениени чыгарганда), токтогон функция кайра башталат ошол жерден, кайсы жерде токтогон болсо.
  4. Эгер Future ийгиликтүү аяктагыс, Future кайтарган мааниси await выражениесинин натыйжасы болот.
  5. Эгер Future ката менен аяктагыс (исключение чыгарса), ал исключение await чакырган жерге чыгат.

Мисал:

// `async` белгиленген асинхрондуу функция
Future<String> fetchData() async {
  // Асинхрондуу операцияны имитациялоо (мисалы, тармактык суроо)
  await Future.delayed(Duration(seconds: 2));
  return 'Желиден алынган маалымат!';
}

void main() async {
  print('Маалыматты алуу башталды...');

  // `await` колдонуу менен `Future` аяктоосун күтүү
  try {
    String data = await fetchData();
    print('Алыныптыр: $data');
  } catch (e) {
    print('Маалымат алууда ката: $e');
  }

  print('Программа аяктады (эми дагы `await` иштеп жатышы мүмкүн)');
}

Бул мисалда main async деп белгиленген, await колдонуу үчүн. await fetchData() main ишин 2 секундга токтотот, негизги UI агымын блоктабай. fetchData күтүп жатканда, башка бөлүктөр иштей берет. fetchData аяктагандан кийин, main кайра уланат жана data өзгөрмөсүнө кайтарылган мааниси берилет.