Uma coroutine é um processo computacional que direciona um bloco ou função para trabalhar de forma concorrente.
Na sua execução, uma coroutine não é atribuida a uma Thread em específico, ela pode ter início em um Thread e concluir o seu processo em outra.
Toda coroutine só pode ser iniciada em um CoroutineScope, este irá controlar todo o seu ciclo de vida.