Middle
Niyə asinxron metodda uzun müddətli hesablamalar aparmaq olmaz?
sobes.tech Süni İntellekt
AI-dan cavab
Uzun hesablama əməliyyatları əsas izolyatda (UI ipində) icra olunan asinxron metodda UI-ni bloklayır. Hətta Future və ya async/await istifadə etsə də, metod hələ də eyni ipdə icra olunur. Resurs tələbatlı tapşırıq yerinə yetirilərkən, UI yenilənə bilməz və bu, tətbiqin donmasına səbəb olur.
UI-ni bloklamadan uzun əməliyyatları yerinə yetirmək üçün aşağıdakı istifadə olunmalıdır:
- İzolalar: Əsas izolyat ilə paylaşmayan ayrıca icra axınları. İzolalar arasında əlaqə portlar (SendPort, ReceivePort) vasitəsilə həyata keçirilir.
- Compute funksiyası: Kiçik hesablamalar üçün izolalar yaratmaq və idarə etmək üçün rahat bir qabıq.
import 'dart:isolate';
import 'package:flutter/foundation.dart';
// Uzun hesablama əməliyyatları edən funksiya
int performHeavyComputation(int data) {
// Uzun hesablama simulyasiyası
int result = 0;
for (int i = 0; i < 1000000000; i++) {
result += i;
}
return result + data;
}
// compute istifadə edərək başqa izolatda icra
Future<int> heavyComputationInIsolate(int data) async {
return compute(performHeavyComputation, data);
}
// StatefulWidget-də nümunə istifadəsi
class MyWidgetState extends State<MyWidget> {
int computationResult = 0;
Future<void> _startComputation() async {
// Uzun hesablama əməliyyatlarını başqa izolatda çağır
computationResult = await heavyComputationInIsolate(10);
setState(() {
// Nəticəni əldə etdikdən sonra UI-ni yenilə
});
}
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Hesablama nəticəsi: $computationResult'),
ElevatedButton(
onPressed: _startComputation,
child: const Text('Hesablama başlat'),
),
],
),
);
}
}