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
suspendlub z kontekstu korutyny. Kompilator zapewnia to ograniczenie. - Nie blokuje wątku. Podczas wykonywania operacji asynchronicznej (np. żądania sieciowego), funkcja
suspendzawiesza 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
launchiasyncz bibliotekikotlinx.coroutines, pozwala pisać kod asynchroniczny w stylu sekwencyjnym, łatwo czytelny. - Kompilator zamienia funkcje
suspendna 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.