Ответ
Операция в Dispatchers.IO выполнится в пуле потоков, оптимизированном для ввода-вывода (IO-операций). Этот диспетчер создает и переиспользует потоки по мере необходимости, что эффективно для блокирующих операций (сеть, файлы, БД).
Важно:
- Не используйте для CPU-intensive задач (для них
Dispatchers.Default) - Не блокируйте потоки надолго (может исчерпать пул)
- Для отмены используйте
coroutineContext.isActive
Пример:
withContext(Dispatchers.IO) {
val data = blockingFileRead() // блокирующая операция
withContext(Dispatchers.Main) {
updateUI(data) // возвращаемся в Main поток
}
}