Sobes.tech
Middle

Ποια είναι η διαφορά μεταξύ launch και async/await στο Kotlin;

sobes.tech AI

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

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

Το async ξεκινά μια coroutine που εκτελεί μια εργασία και επιστρέφει ένα αποτέλεσμα τύπου Deferred<T>. Για να λάβετε το αποτέλεσμα, χρησιμοποιείται το await(), το οποίο αναστέλλει την τρέχουσα coroutine μέχρι να ολοκληρωθεί η ασύγχρονη εργασία. Τα async/await χρησιμοποιούνται όταν χρειάζεται να λάβετε το αποτέλεσμα μιας ασύγχρονης λειτουργίας.

Παράδειγμα χρήσης:

// launch - χωρίς επιστρεφόμενο αποτέλεσμα
fun doSomethingAsync() = GlobalScope.launch {
    delay(1000)
    println("Η εργασία ολοκληρώθηκε")
}

// async/await - με επιστρεφόμενο αποτέλεσμα
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
    delay(1000)
    42
}.await()

suspend fun main() {
    doSomethingAsync()

    val result = calculateSomethingAsync()
    println("Αποτέλεσμα: $result")
}

Πίνακας σύγκρισης διαφορών:

Χαρακτηριστικό launch async/await
Τύπος επιστροφής Job Deferred<T>
Αναμονή Δεν μπλοκάρει (fire and forget) Απαιτεί await() για μπλοκαρισμένη αναμονή αποτελέσματος
Χρήση Για την εκκίνηση εργασιών που δεν απαιτούν επιστροφή αποτελέσματος Για την εκκίνηση εργασιών των οποίων το αποτέλεσμα είναι απαραίτητο για τη μετέπειτα λογική
Διαχείριση σφαλμάτων Μέσω CoroutineExceptionHandler Μέσω try-catch κατά την κλήση του await()