Sobes.tech
Junior — Middle

Ποια είναι η διαφορά μεταξύ της χρήσης ασύγχρονων συναρτήσεων με τη λέξη-κλειδί async και της κλήσης launch στο πλαίσιο του ασύγχρονου προγραμματισμού;

sobes.tech AI

Απάντηση από AI

Η λέξη-κλειδί async χρησιμοποιείται για τον ορισμό μιας ασύγχρονης λειτουργίας που επιστρέφει ένα αντικείμενο τύπου Deferred ή Job και μπορεί να ανασταλεί με εσωτερικές λειτουργίες suspend. Η κλήση μιας τέτοιας λειτουργίας δεν την ξεκινά αυτόματα, αλλά επιστρέφει ένα καθυστερημένο αποτέλεσμα που μπορεί να ληφθεί με await.

Το launch είναι μια λειτουργία που ξεκινά μια νέα coroutine και αρχίζει αμέσως την εκτέλεσή της. Επιστρέφει ένα αντικείμενο Job, το οποίο μπορεί να χρησιμοποιηθεί για τη διαχείριση του κύκλου ζωής της coroutine (π.χ., ακύρωση).

Παράδειγμα:

suspend fun fetchData(): String {
    delay(1000)
    return "Δεδομένα"
}

fun main() = runBlocking {
    // async επιστρέφει ένα Deferred, η εκτέλεση ξεκινά αμέσως
    val deferred = async { fetchData() }
    println("Κάνοντας άλλα")
    val result = deferred.await() // περιμένει το αποτέλεσμα
    println(result)

    // launch ξεκινά μια coroutine, αλλά δεν επιστρέφει αποτέλεσμα
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join() // περιμένει να ολοκληρωθεί
}

Συνοπτικά:

  • Το async χρησιμοποιείται για την εκκίνηση μιας ασύγχρονης λειτουργίας με αποτέλεσμα.
  • Το launch ξεκινά μια coroutine χωρίς επιστρεφόμενη τιμή, για εργασίες φόντου.
  • Το async επιστρέφει Deferred, το launchJob.