Dlaczego funkcja asynchroniczna nie zwraca od razu określonego typu?
sobes.tech AI
Odpowiedź od AI
Funkcja asynchroniczna w Flutter/Dart nie zwraca od razu określonego typu, ponieważ wykonuje operację, która może zająć czas (np. żądanie sieciowe, odczyt pliku). Zamiast blokować wątek wykonania do czasu zakończenia operacji, funkcja asynchroniczna natychmiast zwraca Future.
Future to obiekt reprezentujący potencjalną wartość lub błąd, które będą dostępne w przyszłości. Działa jak obietnica, że operacja zostanie zakończona, a gdy tak się stanie, wynikiem będzie albo wartość określonego typu, albo błąd.
Użycie Future pozwala głównemu wątkowi wykonawczemu (głównemu izolatorowi) kontynuować obsługę innych zadań, nie czekając na zakończenie operacji asynchronicznej. Gdy operacja się kończy, Future o tym informuje, a zarejestrowany kod (np. przez .then() lub await) może obsłużyć wynik.
Przykład:
Future<String> fetchData() async {
// Symulacja długiej operacji
await Future.delayed(Duration(seconds: 2));
return "Dane otrzymane!";
}
void main() {
print("Początek");
fetchData().then((data) {
print(data); // Wykona się po zakończeniu Future
});
print("Koniec"); // Wykona się natychmiast, bez czekania na fetchData
}
Wynik tego kodu będzie:
Początek
Koniec
Dane otrzymane!
To demonstruje zachowanie nieblokujące. Gdyby fetchData zwracało od razu String, program zablokowałby się na 2 sekundy przed wydrukowaniem "Koniec". Future pozwala uniknąć takiego blokowania.