runBlocking
запускает новую сопрограмму и прерывает текущий поток до его завершения.Эта функция не должна использоваться из сопрограммы.Он предназначен для связывания обычного кода блокировки с библиотеками, написанными в стиле приостановки, для использования в основных функциях и в тестах.
// line 1
runBlocking {
// line 2
launch(coroutineDispatcher) {
// line 3
}
// line 4
}
// line 5
someFunction()
В случае использования runBlocking
строк кода будетвыполняется в следующем порядке:
line 1
line 2
line 4
line 3
line 5 // this line will be executed after coroutine is finished
Глобальная область используется для запуска сопрограмм верхнего уровня, которые работают в течение всего времени жизни приложения и не отменяются преждевременно.Другое использование глобальной области действия - операторы, работающие в Dispatchers.Unconfined, с которыми не связано никакое задание.Код приложения, как правило, должен использовать определяемый приложением CoroutineScope, поэтому использование асинхронного или запуска на экземпляре GlobalScope крайне нежелательно.
// line 1
GlobalScope.launch(coroutineDispatcher) {
// line 2
}
// line 3
someFunction()
В случае использования GlobalScope.launch
будут выполняться строки кода вследующий порядок:
line 1
line 3
line 2
Таким образом, runBlocking
блокирует текущий поток до его завершения, GlobalScope.launch
нет.