Sobes.tech
Middle

Wie funktionieren die Konstruktionen async und await in der Programmiersprache, die für die Entwicklung von Android-Anwendungen verwendet wird?

sobes.tech KI

Antwort von AI

In Kotlin, das für die Android-Entwicklung verwendet wird, sind async und await Funktionen aus der Coroutine-Bibliothek. Sie sind keine Schlüsselwörter der Sprache, wie in einigen anderen Sprachen.

async startet eine neue Coroutine im Hintergrund und gibt ein Deferred-Objekt zurück, das das Ergebnis der Ausführung in der Zukunft repräsentiert. Die Coroutine, die async aufruft, setzt ihre Arbeit fort, ohne auf den Abschluss der gestarteten asynchronen Operation zu warten.

await ist eine suspending-Funktion, die auf einem Deferred-Objekt aufgerufen wird. Sie unterbricht die Ausführung der aktuellen Coroutine, bis die mit async gestartete asynchrone Operation abgeschlossen ist und ihr Ergebnis zurückgibt. Wenn das Ergebnis bereits verfügbar ist, gibt await es sofort zurück.

Syntax:

import kotlinx.coroutines.*

suspend fun fetchUserData(): String {
    // Simulation einer langen Operation
    delay(1000)
    return "Benutzerdaten"
}

suspend fun processData(data: String): String {
    // Simulation einer weiteren langen Operation
    delay(2000)
    return "Verarbeitet: $data"
}

suspend fun main() {
    val deferredData = CoroutineScope(Dispatchers.IO).async {
        // Asynchron Daten abrufen
        fetchUserData()
    }

    // Wir können andere Arbeiten ausführen, während die Daten geladen werden

    val data = deferredData.await() // Warten auf fetchUserData()

    val processedResult = withContext(Dispatchers.Default) {
        // Daten verarbeiten, möglicherweise auf einem anderen Thread
        processData(data)
    }

    println(processedResult) // Gibt "Verarbeitet: Benutzerdaten" nach den Verzögerungen aus
}

Wichtige Punkte:

  • async gibt Deferred zurück, das eine "Versprechung" des Ergebnisses ist.
  • await ist eine suspending-Funktion, die die aufrufende Coroutine pausiert.
  • Wird im Kontext von Coroutinen für nicht-blockierende asynchrone Operationen verwendet.
  • Ermöglicht die parallele Ausführung mehrerer asynchroner Aufgaben und das Sammeln ihrer Ergebnisse.