`suspend` means the function can pause without blocking the thread and resume later. It does NOT automatically mean “runs on a new thread” — the dispatcher decides where it runs.
suspend fun loadUser(id: String): User {
// can suspend here (e.g., awaiting IO)
return api.getUser(id)
}
Advanced answer
Deep dive
Expanding on the short answer — what usually matters in practice:
Context (tags): coroutines, suspend, dispatcher
JVM: memory (heap/stack), GC, and what drives latency.
Contracts: equals/hashCode/toString, mutability and consequences.