Sobes.tech
Middle

Ποια είναι οι βασικές κλάσεις στα 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")
}