Functions that start coroutines, such as launch, async, runBlocking, and coroutineScope – when and how to use them.
Structured concurrency
– the rules that keep your coroutines safe and predictable.
Coroutine scopes (viewModelScope, lifecycleScope, applicationScope, etc.) and their lifecycle.
Job states and how to manage coroutine lifecycles (isActive, isCompleted, cancel(), etc.).
Dispatchers – when to use Dispatchers.Default, Dispatchers.IO, Dispatchers.Main, or custom thread limits.
Real-life use cases – including examples of high-score loading with coroutine best practices.
_