Ποια είναι οι βασικές κλάσεις στα Kotlin Coroutines;
sobes.tech AI
Απάντηση από AI
Κύρια κλάσεις και έννοιες στα Kotlin Coroutines:
-
CoroutineScope: Ορίζει τον κύκλο ζωής των κορουτινών που ξεκινούν μέσα σε αυτό. Επιτρέπει την ακύρωση όλων των παιδιών κορουτινών. -
Job: Αντιπροσωπεύει ένα χειριστήριο σε μια κορουτίνα. Επιτρέπει την παρακολούθηση της κατάστασής της, την αναμονή για το τέλος της, την ακύρωσή της. -
Deferred: Ένας ειδικός τύποςJobπου αντιπροσωπεύει μια τιμή που θα είναι διαθέσιμη αργότερα. Χρησιμοποιείται για ασύγχρονους υπολογισμούς που επιστρέφουν αποτέλεσμα. Το αποτέλεσμα λαμβάνεται με τη λειτουργία.await(). -
Dispatcher: Ορίζει το νήμα ή το νήμα-πυρήνα στο οποίο εκτελείται η κορουτίνα. Οι κύριοι διαχειριστές:Dispatchers.Default: Βελτιστοποιημένο για εργασίες εντατικές σε CPU. Χρησιμοποιεί κοινό νήμα-πυρήνα.Dispatchers.IO: Βελτιστοποιημένο για λειτουργίες I/O (δίκτυο, δίσκος). Χρησιμοποιεί κατάλληλο αριθμό νημάτων.Dispatchers.Main: Το κύριο νήμα UI. Για ενημερώσεις UI. Διαθέσιμο σε πλατφόρμες Android και άλλες με την κατάλληλη εξάρτηση.Dispatchers.Unconfined: Ξεκινά την κορουτίνα στο τρέχον νήμα, αλλά την συνεχίζει σε οποιοδήποτε νήμα που συνεχίζει τη λειτουργία suspending.
-
Suspending function: Συνάρτηση που σημειώνεται με τη λέξη-κλειδίsuspendκαι μπορεί να διακοπεί και να συνεχιστεί αργότερα. Μπορεί να καλέσει άλλες suspending συναρτήσεις. -
runBlocking: Μπλοκάρει το τρέχον νήμα μέχρι όλες τις κορουτίνες στο πεδίο δράσης της να ολοκληρωθούν. Χρησιμοποιείται κυρίως για δοκιμές και στο main. -
launch: Ξεκινά μια νέα κορουτίνα χωρίς να μπλοκάρει το τρέχον νήμα και επιστρέφει έναJob. -
async: Ξεκινά μια νέα κορουτίνα χωρίς να μπλοκάρει το τρέχον νήμα και επιστρέφει έναDeferred.
Παράδειγμα χρήσης:
// Παράδειγμα χρήσης CoroutineScope, launch και Dispatchers.IO
import kotlinx.coroutines.*
fun main() = runBlocking {
// Δημιουργία CoroutineScope
val scope = CoroutineScope(Dispatchers.IO)
// Εκκίνηση κορουτίνας στον διαχειριστή IO
val job: Job = scope.launch {
// Εκτέλεση αίτησης δικτύου ή άλλης I/O λειτουργίας
delay(1000) // Προσομοίωση εργασίας
println("Η κορουτίνα τελείωσε στο ${Thread.currentThread().name}")
}
// Αναμονή για την ολοκλήρωση της κορουτίνας
job.join()
println("Η κύρια λειτουργία τελείωσε")
}
// Παράδειγμα χρήσης async και Deferred
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferredSum: Deferred<Int> = async {
delay(500)
1 + 1
}
// Αναμονή αποτελέσματος
val result = deferredSum.await()
println("Το αποτέλεσμα είναι: $result")
}