There are different ways of launching a coroutine in Kotlin. I found a couple of examples where GlobalScope
and CoroutineScope
are used. But the latter one is being created directly when launching a coroutine:
Using
GlobalScope
:fun loadConfiguration() { GlobalScope.launch(Dispatchers.Main) { val config = fetchConfigFromServer() // network request updateConfiguration(config) } }
Using
CoroutineScope
instances, created directly when launching a coroutine:fun loadConfiguration() { CoroutineScope(Dispatchers.Main).launch { val config = fetchConfigFromServer() // network request updateConfiguration(config) } }
In this case is there a difference between these two approaches?
Doesn't the second case violate the principle of structured concurrency?