O que é uma função suspend em Kotlin coroutines? Explicação para iniciantes
Olá a todos! Comecei a estudar coroutines em Kotlin e não consigo entender o que é uma função suspend. Na documentação dizem que é uma "função suspensível", mas isso não me diz nada.
Tentei escrever um código simples, mas ele não compila:
```kotlin
fun main() {
fetchUserData() // Erro: Suspend function 'fetchUserData' should be called only from a coroutine or another suspend function
}
suspend fun fetchUserData(): String {
delay(1000) // simulação de operação longa
return "User data"
}
```
Por que não posso simplesmente chamar essa função a partir do main? O que é "suspend" na verdade? Como funciona por baixo dos panos? Li sobre async/await em outras linguagens, mas aqui tudo parece diferente. Explique, por favor, em palavras simples com exemplos, o que é uma função suspend e para que ela serve.
Especialmente, estou interessado em:
1. O que acontece com a thread quando uma função suspend é chamada?
2. Como ela difere de uma função normal?
3. Por que não posso chamá-la a partir de uma função normal?