Ответ
LaunchedEffect запускается в корутине, привязанной к области видимости (CoroutineScope) композиции. По умолчанию это Dispatchers.Main, так как Compose работает в UI-потоке. Однако внутри блока можно переключать контекст с помощью withContext.
LaunchedEffect(key) {
// По умолчанию - Main
withContext(Dispatchers.IO) {
// Работа в IO-потоке
}
}
Важно: не выполняйте долгие операции напрямую в LaunchedEffect без смены диспетчера, чтобы не блокировать UI.