Sobes.tech
Middle

Czym jest funkcja 'suspend' w Kotlinie?

sobes.tech AI

Odpowiedź od AI

Funkcja suspend to funkcja, którą można zawiesić (suspend) i wznowić (resume) później. Są one podstawową częścią korutyn w Kotlinie i służą do wykonywania operacji asynchronicznych bez blokowania wątku.

Kluczowe cechy:

  • Może być wywoływana tylko z innej funkcji suspend lub z kontekstu korutyny. Kompilator zapewnia to ograniczenie.
  • Nie blokuje wątku. Podczas wykonywania operacji asynchronicznej (np. żądania sieciowego), funkcja suspend zawiesza wykonanie korutyny, zwalniając wątek dla innych zadań. Gdy operacja asynchroniczna się kończy, korutyna jest wznawiana od miejsca, w którym została zatrzymana.
  • Używana do strukturalnego równoległego wykonywania. W połączeniu z funkcjami takimi jak launch i async z biblioteki kotlinx.coroutines, pozwala pisać kod asynchroniczny w stylu sekwencyjnym, łatwo czytelny.
  • Kompilator zamienia funkcje suspend na automaty skończone. To pozwala zachować stan korutyny pomiędzy punktami zawieszenia.

Przykład:

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    // Symulacja operacji asynchronicznej (np. żądania sieciowego)
    delay(1000) // punkty zawieszenia
    return "Dane załadowane"
}

fun main() = runBlocking {
    println("Rozpoczynamy ładowanie...")
    val data = fetchData() // wywołanie funkcji suspend
    println(data)
    println("Ładowanie zakończone")
}

Tutaj fetchData to funkcja suspend, która używa delay (kolejnej funkcji suspend) do symulacji opóźnienia. delay jest punktem zawieszenia. runBlocking tworzy zakres korutyny do wykonania main jako blokującego wątku, ale wewnątrz niej fetchData jest wykonywana w sposób nieblokujący.