withContext(dispatcher) { } переключает контекст на блок и возвращает результат; по отмене/выходе возвращает предыдущий контекст.
Разбор
- Типичный паттерн: suspend API сам делает IO внутри.
- Не путать с
launch(Dispatchers.IO) — withContext сохраняет структурированность текущего Job.
- Можно менять другие элементы CoroutineContext.
- Избегайте лишних nested withContext в горячих путях.
Итог
withContext — способ «сходить на IO и вернуть значение» в той же корутине.