Ответ
Dispatchers.Main и Dispatchers.Main.immediate оба работают с главным потоком, но различаются поведением при вызове из него:
Dispatchers.Mainвсегда планирует выполнение в следующем цикле событий, даже если вызывается из главного потокаDispatchers.Main.immediateвыполняет код немедленно, если уже находится в главном потоке, иначе ведет себя как обычныйMain
Пример:
// Если вызвано из Main потока:
withContext(Dispatchers.Main) {
// выполнится в следующем цикле событий
}
withContext(Dispatchers.Main.immediate) {
// выполнится сразу
}
Main.immediate полезен для оптимизации, когда нужно избежать лишнего переключения контекста, если уже находишься в главном потоке.