Mobil ilovalar ishlab chiqish



Download 387,44 Kb.
bet31/34
Sana14.01.2022
Hajmi387,44 Kb.
#363624
1   ...   26   27   28   29   30   31   32   33   34
Bog'liq
Dart tili mustaqil ish

7-bob. Asinxroniya
Asinxroniya va kelajakka kirish
Dart tili, ko'plab zamonaviy dasturlash tillari kabi, asinxroniyani qo'llab-quvvatlaydi. Nega asinxron ham kerak? Misol uchun, grafik Android ilovasini oling. Android ilovasini ishga tushirganingizda, u asosiy foydalanuvchi interfeysida ishlaydi. Ushbu asosiy mavzu tugmani bosish, ekranni bosish va hokazo kabi barcha UI hodisalarini boshqaradi. Biz tugmachalarni bosishimiz, matn maydonlariga matn kiritishimiz mumkin va asosiy mavzuda hamma narsa qayta ishlanadi. Biroq, ilovalarning ishi, qoida tariqasida, bu bilan cheklanmaydi. Masalan, elektron pochta ilovasi

tarmoq orqali bir vaqtning o'zida so'rovlarni yuborishi mumkin - avval yozilgan xatlarni yuborish yoki yangi harflarni tekshirish uchun server bilan bog'lanish. Tarmoq so'rovi uzoq vaqt talab qilishi mumkin, ayniqsa barqaror bo'lmagan Internet muhitida. Biroq, bu tarmoq so'rovlari odatda asosiy UI oqimini bloklamaydigan tarzda yuboriladi. Agar tarmoq so'rovlari asosiy ish zarrachasida qilingan bo'lsa, foydalanuvchi kutishi kerak edi

tarmoq so'rovi yuboriladi va uning natijasi olinadi va so'rov davomida dastur bloklanadi va so'rovning tugashini kutgan bo'lardi. Biroq, ko'plab oddiy ilovalarda bu sodir bo'lmaydi - biz xat yuborishimiz va dasturni jiddiy osishsiz darhol yangi xat yozishni boshlashimiz mumkin - chunki tarmoq so'rovi asinxron tarzda amalga oshiriladi. Va u tugagach, biz faqat qandaydir bildirishnomani ko'rishimiz mumkin. Bu asinxroniyadan foydalanishning afzalligi. Va bu nafaqat tarmoqqa tegishli

so'rovlar va umuman, uzoq vaqt talab qilishi mumkin bo'lgan ilovadagi barcha og'ir vazifalar.


Dart tilining o'ziga kelsak, u bir ipli tildir - u bir vaqtning o'zida faqat bitta vazifani bajarishi mumkin. Biroq, voqea tsikli va ikkita voqea navbatini (voqea navbati va microTask navbati) amalga oshirish orqali u turli vazifalarni asinxron tarzda bajarishga imkon beradi. Xususan, har qanday Dart ilovasi ishga tushirilganda, u ishlay boshlaydi

bitta dastur chizig'i.


U ikkita navbatni ishga tushiradi, MicroTask va Event, ular bajarilishi kerak bo'lgan vazifalarni o'z ichiga oladi.
Keyinchalik, ip asosiy () funktsiyasini bajaradi va u tugagandan so'ng, voqea tsikli yoki Voqealar sikli. Ushbu tsikl MicroTask va Voqealar navbatlaridan barcha vazifalarni ketma-ket qabul qiladi va bajaradi.

MicroTask asenkron bajarilishi kerak bo'lgan kichik ichki vazifalarni saqlash uchun mo'ljallangan.


Vazifalarning aksariyati Voqealar navbatiga joylashtirilgan - bu tashqi hodisalar, masalan, GUI hodisalari (masalan, mobil ilovalardagi tugmani bosish), taymerlar, fayllarni o'qish / yozish, oqimlar bilan ishlash va hk. Kelajakdagi ob'ektlar.
Kelajakdagi sinf

Bu holatda asosiy sinf Future sinfidir. Future klassi kelajakda bajarilishini yakunlaydigan kutilayotgan operatsiya natijasini ifodalaydi. Amaliyot natijasi ba'zi qiymat yoki xato bo'lishi mumkin.

Future ob'ekti ikkita holatda bo'lishi mumkin: tugallanmagan va tugallangan. Tugallanmagan holatda, Kelajak ifodalovchi operatsiya aniqlanadi va u allaqachon bajarila boshlagan bo'lishi mumkin, ammo natija hali olinmagan. Tugallangan holatda operatsiya allaqachon bajarilishini tugatgan, uning natijasi - ba'zi qiymat yoki xato - olingan.
Keling, eng oddiy misolni ko'rib chiqaylik:

1

2

3



4

5

6



7

8

9



Future getMessage() {

  // для эмуляции длительной операции делаем задержку в 3 секунды

  return Future.delayed(Duration(seconds: 3), () => print("Пришло новое сообщение от Тома"));

}

 



void main() {

  getMessage();

  print("Проверка сообщений...");

}


Demak, bu yerda Future obyektini qaytaruvchi getMessage funksiyasi mavjud. Bu funksiya Future sinfining nomli konstruktorlaridan birini Future.delayed () chaqiradi. Ushbu konstruktor ikkita parametrni oladi. Birinchi parametr - bu kechikish vaqtini (Duration (soniya: 3)) o'rnatadigan Duration ob'ekti, bu holda uch soniya. Ikkinchi parametr - bu ba'zi amallarni bajaradigan ba'zi funksiya - bu holda, bu faqat konsolga xabar chiqishi.

1

() => print("Пришло новое сообщение от Тома")

Shunday qilib, uch soniyadan so'ng konsolda "Tomdan yangi xabar qabul qilindi" qatori ko'rsatiladi. Bu, asosan, Kelajak vakili bo'lgan kechiktirilgan operatsiyadir.
Asosiy funktsiyada biz getMessage funktsiyasini chaqiramiz va keyin ba'zi xabarlarni ko'rsatamiz. E'tibor bering, getMessage funksiyasi birinchi bo'lib chaqiriladi. Biroq, dasturning konsol chiqishi quyidagicha bo'ladi:

Проверка сообщений...

Пришло новое сообщение от Тома

Aslida, getMessage funksiyasi asosiy funksiyadagi barcha boshqa amallar bajarilgandan keyingina yakunlanishini ko‘rishimiz mumkin. Ya'ni, 3 soniya davom etadigan getMessage funksiyasi asinxron tarzda bajariladi. Chaqirilsa, getMessage funksiyasi tugallanmagan holatda bo'lgan Future obyektini qaytaradi. Va Future.delayed konstruktoridan funksiya bajarilgandan atigi uch soniya o'tgach, u tugallangan holatga o'tadi.

Future ishining mexanikasi shundayki, yangi Future ob'ekti aniqlanganda, u ifodalovchi operatsiya (masalan, bu holda, xabarni qabul qilish) voqea navbatiga tushadi. Keyin, Voqealar siklida asosiy funktsiyani bajargandan so'ng, bu operatsiya Voqealar navbatdan olinadi va bajariladi.


Download 387,44 Kb.

Do'stlaringiz bilan baham:
1   ...   26   27   28   29   30   31   32   33   34




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish