Middle
Jak działają konstrukcje async i await w języku programowania używanym do tworzenia aplikacji na Androida?
sobes.tech AI
Odpowiedź od AI
W Kotlinie, używanym do rozwoju Androida, async i await to funkcje z biblioteki korutyn. Nie są one słowami kluczowymi języka, jak w niektórych innych językach.
async uruchamia nową korutynę w tle i zwraca obiekt typu Deferred, który reprezentuje wynik wykonania w przyszłości. Korutyna wywołująca async kontynuuje swoją pracę, nie czekając na zakończenie uruchomionej operacji asynchronicznej.
await jest funkcją suspending, wywoływaną na obiekcie Deferred. Zawiesza ona wykonanie bieżącej korutyny do czasu, aż operacja asynchroniczna uruchomiona za pomocą async się zakończy i zwróci swój wynik. Jeśli wynik jest już dostępny, await zwraca go natychmiast.
Składnia:
import kotlinx.coroutines.*
suspend fun fetchUserData(): String {
// Symulacja długiej operacji
delay(1000)
return "Dane użytkownika"
}
suspend fun processData(data: String): String {
// Symulacja innej długiej operacji
delay(2000)
return "Przetworzone: $data"
}
suspend fun main() {
val deferredData = CoroutineScope(Dispatchers.IO).async {
// Asynchronicznie pobieramy dane
fetchUserData()
}
// Możemy wykonywać inne zadania podczas ładowania danych
val data = deferredData.await() // Czekamy na zakończenie fetchUserData()
val processedResult = withContext(Dispatchers.Default) {
// Przetwarzamy dane, być może na innym wątku
processData(data)
}
println(processedResult) // Wyświetli "Przetworzone: Dane użytkownika" po opóźnieniach
}
Kluczowe punkty:
asynczwracaDeferred, które jest "obietnicą" wyniku.awaitjest funkcją suspending, która zawiesza wywołującą korutynę.- Używa się jej w kontekście korutyn do nieblokujących operacji asynchronicznych.
- Pozwala na równoległe wykonywanie wielu zadań asynchronicznych i zbieranie ich wyników.