რატომ არ აბრუნებს ასინქრონული ფუნქცია მითითებულ ტიპს დაუყოვნებლივ?
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-ი საშუალებას აძლევს ამ ბლოკირების თავიდან აცილებას.