Ответ
Для выбора CoroutineDispatcher учитывайте тип задачи:
- Dispatchers.Main – работа с UI (обновление View, LiveData). Используется только в основном потоке.
viewModelScope.launch(Dispatchers.Main) { updateUI() }
- Dispatchers.IO – для блокирующих операций (сеть, БД, файлы). Имеет пул потоков для тяжелых задач.
withContext(Dispatchers.IO) { fetchData() }
-
Dispatchers.Default – для CPU-интенсивных задач (сортировка, вычисления). Использует пул потоков, равный числу ядер.
-
Dispatchers.Unconfined – запускает корутину в текущем потоке, но может продолжить в любом (редко используется).
Важно: Не используйте Dispatchers.IO для CPU-задач и наоборот. Для кастомных сценариев можно создать свой ExecutorService и конвертировать в диспетчер через asCoroutineDispatcher().