Γιατί η ασύγχρονη λειτουργία δεν επιστρέφει αμέσως τον καθορισμένο τύπο;
sobes.tech AI
Απάντηση από AI
Μια ασύγχρονη λειτουργία στο Flutter/Dart δεν επιστρέφει άμεσα τον καθορισμένο τύπο, επειδή εκτελεί μια λειτουργία που μπορεί να διαρκέσει χρόνο (π.χ., ένα αίτημα δικτύου, ανάγνωση αρχείου). Αντί να μπλοκάρει το νήμα εκτέλεσης μέχρι να ολοκληρωθεί η λειτουργία, η ασύγχρονη λειτουργία επιστρέφει αμέσως ένα Future.
Το Future είναι ένα αντικείμενο που αντιπροσωπεύει μια πιθανή τιμή ή σφάλμα που θα είναι διαθέσιμα στο μέλλον. Λειτουργεί ως υπόσχεση ότι η λειτουργία θα ολοκληρωθεί, και μόλις συμβεί αυτό, το αποτέλεσμα θα είναι είτε η τιμή του καθορισμένου τύπου είτε ένα σφάλμα.
Η χρήση του Future επιτρέπει στο κύριο νήμα εκτέλεσης (το κύριο απομόνωση) να συνεχίσει να επεξεργάζεται άλλες εργασίες χωρίς να περιμένει την ολοκλήρωση της ασύγχρονης λειτουργίας. Όταν η λειτουργία ολοκληρωθεί, το Future το ειδοποιεί, και ο καταχωρημένος κώδικας (π.χ., μέσω .then() ή await) μπορεί να επεξεργαστεί το αποτέλεσμα.
Παράδειγμα:
Future<String> fetchData() async {
// Προσομοίωση μιας μακράς λειτουργίας
await Future.delayed(Duration(seconds: 2));
return "Δεδομένα λήφθηκαν!";
}
void main() {
print("Αρχή");
fetchData().then((data) {
print(data); // Θα εκτελεστεί μετά την ολοκλήρωση του Future
});
print("Τέλος"); // Εκτελείται αμέσως, χωρίς να περιμένει το fetchData
}
Το αποτέλεσμα αυτού του κώδικα θα είναι:
Αρχή
Τέλος
Δεδομένα λήφθηκαν!
Αυτό δείχνει μια μη μπλοκαριστική συμπεριφορά. Αν το fetchData επέστρεφε άμεσα μια String, το πρόγραμμα θα μπλοκαριζόταν για 2 δευτερόλεπτα πριν εκτυπώσει το "Τέλος". Το Future επιτρέπει την αποφυγή αυτού του μπλοκαρίσματος.