Чӣ гуна дониши шумо дар бораи асинхронӣ дар Dart аст?
sobes.tech AI
Ҷавоб аз AI
Асинхронност дартӣ бо истифода аз:
-
Консепти 'изолятҳо' (Isolates): Процесҳои кории мустақил, ҳар яке бо ёддоштҳои худ. Барои иҷрои параллелии вазифаҳои гарон ва бе бастани ҷараёни асосии интерфейси корбар истифода мешаванд. Варақаҳои байни изолятҳо тавассути портҳо (ReceivePort, SendPort) сурат мегирад.
-
Калидвожаҳои
async,await:asyncфунксияро нишон медиҳад, ки амалҳои асинхронӣ иҷро мекунад ваFutureбармегардонад.awaitдар дохили функсияиasyncбарои интизор шудан ба анҷомиFutureистифода мешавад. Ҳангоми расидан баawait, иҷрои функсия боздошта мешавад, то дигар амалҳо иҷро шаванд, тоFutureбо натиҷа ё хато анҷом ёбад.
Future<String> fetchData() async { // Имитацияи таъхир await Future.delayed(Duration(seconds: 2)); return 'Маълумот гирифта шуд'; } void main() async { print('Оғоз'); String result = await fetchData(); // интизор шудан барои анҷоми fetchData print(result); print('Оҳир'); } -
Класи
Future<T>: Намояндаи натиҷаи амали асинхронӣ, ки дар оянда дастрас мешавад.Futureметавонад дар яке аз се ҳолат бошад:- Ноком (uncompleted)
- Бо натиҷа (completed with a value)
- Бо хато (completed with an error)
Тарзи коркарди анҷоми
Futureбо ёрииthen(),catchError(),whenComplete()ёawaitсурат мегирад. -
Класи
Stream<T>: Намояндаи пайдарпайии ҳодисаҳои асинхронӣ. Барои коркарди ҷараёнҳои маълумот истифода мешавад, масалан, хондани файл, гирифтани маълумот тавассути шабака, ҳодисаҳои интерфейси корбар. Ҷараён метавонад якдафъаина (single-subscription) ё бисёрдафъаина (broadcast) бошад. Коркарди ҳодисаҳои ҷараён бо ёрииlisten(),async*,yieldсурат мегирад.Stream<int> countStream(int to) async* { for (int i = 1; i <= to; i++) { await Future.delayed(Duration(seconds: 1)); yield i; // Иҷрои арзиш ба ҷараён } } void main() { Stream<int> stream = countStream(3); stream.listen( (data) => print('Гирифтанд: $data'), onError: (error) => print('Хатогӣ: $error'), onDone: () => print('Ҷараён ба охир расид'), ); }
Асинхронӣ дар дартӣ асос ёфтааст ба модели "якҷояи рӯйдодҳо" (event loop). Ҷараёни асосӣ кодро ба таври пайдарпай иҷро мекунад, аммо вақте бо амали асинхронӣ (масалан, await ё Future.then) рӯбарӯ мешавад, онро ба "чархаи рӯйдодҳо" (event queue) интиқол медиҳад ва идома медиҳад ба иҷрои коди дигар. Вақте амали асинхронӣ ба охир мерасад, натиҷаи он ба "чархаи рӯйдодҳо" баргардонида мешавад. Давраи рӯйдодҳо пайваста "чархаи рӯйдодҳо"-ро санҷида, вазифаҳоро иҷро мекунад, вақте ки ҷараёни асосӣ озод аст.