Jakie główne klasy istnieją w Kotlin Coroutines?
sobes.tech AI
Odpowiedź od AI
Główne klasy i koncepcje w Kotlin Coroutines:
-
CoroutineScope: Definiuje cykl życia korutyn uruchomionych w jego obrębie. Umożliwia anulowanie wszystkich korutyn potomnych. -
Job: Reprezentuje uchwyt do korutyny. Pozwala śledzić jej stan, oczekiwać na jej zakończenie, anulować ją. -
Deferred: Specjalny typJob, reprezentujący wartość, która będzie dostępna później. Używany do asynchronicznych obliczeń zwracających wynik. Wynik można uzyskać za pomocą funkcji.await(). -
Dispatcher: Definiuje wątek lub pulę wątków, na którym wykonywana jest korutyna. Główne dispatcher:Dispatchers.Default: Optymalizowany dla zadań intensywnych CPU. Używa wspólnej puli wątków.Dispatchers.IO: Optymalizowany dla operacji I/O (sieć, dysk). Używa odpowiedniej liczby wątków.Dispatchers.Main: Główny wątek UI. Do aktualizacji UI. Dostępny na platformie Android i innych z odpowiednim zależnością.Dispatchers.Unconfined: Uruchamia korutynę w bieżącym wątku, ale wznawia ją w dowolnym wątku, który wznowił funkcję suspending.
-
Suspending function: Funkcja oznaczona słowem kluczowymsuspend, która może być zawieszona i wznowiona później. Może wywoływać inne funkcje suspending. -
runBlocking: Blokuje bieżący wątek do czasu zakończenia wszystkich korutyn w jej zakresie. Używany głównie do testów i w funkcji main. -
launch: Uruchamia nową korutynę bez blokowania bieżącego wątku i zwracaJob. -
async: Uruchamia nową korutynę bez blokowania bieżącego wątku i zwracaDeferred.
Przykład użycia:
// Przykład użycia CoroutineScope, launch i Dispatchers.IO
import kotlinx.coroutines.*
fun main() = runBlocking {
// Tworzenie CoroutineScope
val scope = CoroutineScope(Dispatchers.IO)
// Uruchomienie korutyny w dispatcherze IO
val job: Job = scope.launch {
// Wykonanie żądania sieciowego lub innej operacji I/O
delay(1000) // Symulacja pracy
println("Korutyna zakończona w ${Thread.currentThread().name}")
}
// Czekanie na zakończenie korutyny
job.join()
println("Funkcja main zakończona")
}
// Przykład użycia async i Deferred
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferredSum: Deferred<Int> = async {
delay(500)
1 + 1
}
// Czekanie na wynik
val result = deferredSum.await()
println("Wynik to: $result")
}