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() |