Junior
Πώς λειτουργεί η λέξη-κλειδί await στον ασύγχρονο προγραμματισμό στο Flutter;
sobes.tech AI
Απάντηση από AI
Η λέξη-κλειδί await χρησιμοποιείται σε ασύγχρονες συναρτήσεις (σημειωμένες με τη λέξη-κλειδί async) για να διακόψει την εκτέλεση της συνάρτησης μέχρι το Future να ολοκληρωθεί και να επιστρέψει ένα αποτέλεσμα.
Αρχή λειτουργίας:
- Όταν η εκτέλεση φτάσει στη γραμμή με
await, η τρέχουσα συνάρτηση παγώνει. - Ο έλεγχος επιστρέφει στον καλούντα κώδικα (ή στον βρόχο γεγονότων), επιτρέποντας σε άλλα μέρη του προγράμματος να εκτελεστούν. Αυτό αποτρέπει το μπλοκάρισμα του UI.
- Όταν το
Futureπου αναφέρεται μεawaitολοκληρωθεί (δηλαδή, εκτελέσει την ασύγχρονη λειτουργία του και επιστρέψει μια τιμή ή ρίξει μια εξαίρεση), η παγωμένη συνάρτηση συνεχίζει από το σημείο που διακόπηκε. - Αν το
Futureολοκληρώθηκε με επιτυχία, η τιμή που επιστρέφει γίνεται το αποτέλεσμα της έκφρασηςawait. - Αν το
Futureτελειώσει με σφάλμα (ρίξει εξαίρεση), αυτή η εξαίρεση θα ριχτεί στο σημείο που καλείται τοawait.
Παράδειγμα:
// Ασύγχρονη συνάρτηση με `async`
Future<String> fetchData() async {
// Προσομοίωση ασύγχρονης λειτουργίας (π.χ. αίτημα δικτύου)
await Future.delayed(Duration(seconds: 2));
return 'Δεδομένα από το δίκτυο!';
}
void main() async {
print('Ξεκίνημα λήψης δεδομένων...');
// Χρήση `await` για αναμονή ολοκλήρωσης του Future
try {
String data = await fetchData();
print('Λήφθηκε: $data');
} catch (e) {
print('Σφάλμα κατά τη λήψη δεδομένων: $e');
}
print('Το πρόγραμμα ολοκληρώθηκε (αν και το await μπορεί ακόμα να εκτελείται)');
}
Σε αυτό το παράδειγμα, το main σημειώνεται ως async για να μπορεί να χρησιμοποιήσει το await. Η κλήση await fetchData() διακόπτει την εκτέλεση του main για 2 δευτερόλεπτα, χωρίς να μπλοκάρει το κύριο νήμα του UI. Ενώ το fetchData περιμένει, άλλα μέρη της εφαρμογής μπορούν να συνεχίσουν να λειτουργούν. Μόλις το fetchData ολοκληρωθεί, η εκτέλεση του main συνεχίζεται και η μεταβλητή data λαμβάνει την επιστρεφόμενη τιμή.