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, τοlaunch—Job.