Sobes.tech
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:

  • async zwraca Deferred, które jest "obietnicą" wyniku.
  • await jest 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.