Dartda asinxronlik haqida bilimingiz qanday?
sobes.tech AI
AIdan javob
Dart'da asinxronlikni amalga oshirish uchun:
-
"Izolyatorlar" (Isolates) konsepti: Mustaqil ish jarayonlari, har biri o'z xotirasiga ega. Ular resurslarga boy vazifalarni parallel ravishda bajarish uchun ishlatiladi, asosiy foydalanuvchi interfeysining oqimini bloklamasdan. Izolyatorlar o'rtasida aloqa portlar (ReceivePort, SendPort) orqali amalga oshadi.
-
Kalit so'zlar
async,await:asyncfunksiyani belgilaydi, u asinxron operatsiyalarni bajaradi vaFutureqaytaradi.awaitasyncfunksiyasi ichida ishlatiladi vaFuturening yakunlanishini kutadi.awaitga erishilganda, funksiyaning bajarilishi to'xtatiladi, boshqa operatsiyalar bajarilishi uchun imkon beradi,Futureqiymat yoki xato bilan yakunlanganda.
Future<String> fetchData() async { // Kechikishni taqlid qilish await Future.delayed(Duration(seconds: 2)); return 'Ma`lumotlar olindi'; } void main() async { print('Boshlanish'); String result = await fetchData(); // fetchData yakunlanishini kutamiz print(result); print('Tugash'); } -
Future<T>sinfi: Asinxron operatsiyaning natijasini ifodalaydi, kelajakda mavjud bo'ladi.Futureuch holatda bo'lishi mumkin:- Yakunlanmagan (uncompleted)
- Qiymat bilan yakunlangan (completed with a value)
- Xato bilan yakunlangan (completed with an error)
Futurening yakunlanishini boshqarish uchunthen(),catchError(),whenComplete()yokiawaitishlatiladi. -
Stream<T>sinfi: Asinxron voqealar ketma-ketligini ifodalaydi. Ma'lumotlar oqimlarini, masalan, fayldan o'qish, tarmoq orqali ma'lumotlarni qabul qilish, foydalanuvchi interfeysi voqealarini boshqarish uchun ishlatiladi. Oqim yagona subskripsiya (single-subscription) yoki ko'p subskripsiya (broadcast) bo'lishi mumkin. Voqealarni boshqarishlisten(),async*,yieldyordamida amalga oshiriladi.Stream<int> countStream(int to) async* { for (int i = 1; i <= to; i++) { await Future.delayed(Duration(seconds: 1)); yield i; // Oqimga qiymat yuborish } } void main() { Stream<int> stream = countStream(3); stream.listen( (data) => print('Qabul qilindi: $data'), onError: (error) => print('Xato: $error'), onDone: () => print('Oqim tugadi'), ); }
Dart'da asinxronlik "voqealar tsikli" (event loop) modeliga asoslangan. Asosiy oqim ketma-ket kod bajaradi, lekin await yoki Future.then bilan to'qnashganda, uni "voqealar to'plamiga" (event queue) yuboradi va keyingi kodni bajarishda davom etadi. Asinxron operatsiya tugagach, uning natijasi qaytariladi va "voqealar to'plamiga" yuboriladi. Voqealar tsikli doimiy ravishda "voqealar to'plamini" tekshiradi va asosiy oqim bo'sh bo'lsa, vazifalarni bajaradi.