Я изучаю сопрограммы Kotlin.
Следующее содержание взято из художественного https://developer.android.com/kotlin/coroutines.
Важно: Использование suspend не говорит Kotlin о запуске функции в фоновом потоке. Для функций приостановки нормально работать в основном потоке. Также распространено запускать сопрограммы в главном потоке. Вы всегда должны использовать withContext () внутри функции приостановки, когда вам нужна основная безопасность, например, при чтении с диска или записи на диск, выполнении сетевых операций или выполнении операций с интенсивным использованием ЦП.
Обычно я трачу много времени на извлечение данных с удаленного сервера, поэтому мне нужно поместить «функцию извлечения данных» в фоновом потоке, чтобы не заморозить основной интерфейс.
Должен ли я всегда добавлять withContext (Dispatchers) .IO) в состоянии приостановки, когда я использую функцию приостановки для извлечения данных с удаленного сервера?
Кстати,
Код A взят из проекта https://github.com/googlecodelabs/kotlin-coroutines, вы можете увидеть это .
Но я не могу найти ключевое слово withContext () в проекте, почему?
Код A
fun refreshTitle() = launchDataLoad {
repository.refreshTitle()
}
private fun launchDataLoad(block: suspend () -> Unit): Unit {
viewModelScope.launch {
try {
_spinner.value = true
block()
} catch (error: TitleRefreshError) {
_snackBar.value = error.message
} finally {
_spinner.value = false
}
}
}