Dart-da asinxronluq haqqında bilikləriniz nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Dart-də asinxronluq aşağıdakı vasitələrlə həyata keçirilir:
-
"İzolatorlar" (Isolates) konsepti: Müstəqil iş prosesləri, hər biri öz yaddaşına malikdir. Resurs tələbatlı tapşırıqları paralel şəkildə yerinə yetirmək və əsas istifadəçi interfeysinin axınına mane olmamaq üçün istifadə olunur. İzolatorlar arasında əlaqə portlar (ReceivePort, SendPort) vasitəsilə qurulur.
-
Açar sözlər
async,await:asyncfunksiyanın asinxron əməliyyatlar həyata keçirəcəyini vəFutureqaytaracağını göstərir.awaitasyncfunksiyası daxilində istifadə olunur vəFuture-ın tamamlanmasını gözləyir. Bu zaman funksiyanın icrası dayandırılır və digər əməliyyatlar yerinə yetirilə bilər,Futureisə nəticə və ya xəta ilə tamamlanır.
Future<String> fetchData() async { // Gecikməni simulyasiya edir await Future.delayed(Duration(seconds: 2)); return 'Məlumat alındı'; } void main() async { print('Başlanğıc'); String result = await fetchData(); // fetchData-nın tamamlanmasını gözləyirik print(result); print('Son'); } -
Future<T>sinfi: Gələcəkdə mövcud olacaq asinxron əməliyyatın nəticəsini təmsil edir.Futureüç vəziyyətdə ola bilər:- Tamamlanmayıb (uncompleted)
- Nəticə ilə tamamlanıb (completed with a value)
- Xəta ilə tamamlanıb (completed with an error)
Future-ın tamamlanmasını idarə etmək üçünthen(),catchError(),whenComplete()və yaawaitistifadə olunur. -
Stream<T>sinfi: Asinxron hadisələrin ardıcıllığını təmsil edir. Fayldan oxuma, şəbəkədən məlumat alma, istifadəçi interfeys hadisələri kimi məlumat axınlarının işlənməsi üçün istifadə olunur. Axın tək abunəlikli (single-subscription) və ya çoxabunəlikli (broadcast) ola bilər. Hadisələrin işlənməsilisten(),async*,yieldvasitəsilə həyata keçirilir.Stream<int> countStream(int to) async* { for (int i = 1; i <= to; i++) { await Future.delayed(Duration(seconds: 1)); yield i; // Dəyəri axına göndərir } } void main() { Stream<int> stream = countStream(3); stream.listen( (data) => print('Alınan: $data'), onError: (error) => print('Xəta: $error'), onDone: () => print('Axın tamamlandı'), ); }
Dart-də asinxronluq "hadisələr döngüsü" (event loop) modelinə əsaslanır. Əsas axın kodu ardıcıl şəkildə icra edir, lakin await və ya Future.then ilə qarşılaşdıqda, bu əməliyyat "hadisələr yığını"na (event queue) göndərilir və kod icrasına davam edir. Asinxron əməliyyat tamamlandıqda, onun nəticəsi yenidən "hadisələr yığını"na göndərilir. Hadisələr döngüsü davamlı olaraq "hadisələr yığını"nı yoxlayır və əsas axın boş olduqda tapşırıqları yerinə yetirir.