Avatar ·

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?