Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpCrDs 162 of 299 menu
◀ ▶

Переключение потока в Kotlin

По умолчанию корутина может выполняться на потоке, который её запустил. Для тяжелой или блокирующей работы выбирают отдельный пул. Функция withContext временно переключает корутину на указанный Dispatcher и после блока возвращает прежний контекст.

Диспетчер Dispatchers.Default рассчитан на вычисления на нескольких ядрах. Имя текущего потока до и после блока часто различается:

import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext fun main() { runBlocking { println(Thread.currentThread().name) withContext(Dispatchers.Default) { println(Thread.currentThread().name) } println(Thread.currentThread().name) } }

Средняя строка обычно содержит имя потока из пула Default. Первая и третья относятся к потоку, на котором работал runBlocking.

Диспетчер Dispatchers.IO подходит для задач, где много ожидания ввода-вывода. Участок внутри withContext выполняется на потоке из этого пула:

import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext fun main() { runBlocking { withContext(Dispatchers.IO) { println("io thread") } println("back") } }

В runBlocking выведите имя потока, затем в withContext с Dispatchers.Default снова имя потока, после блока - строку "home".

Внутри withContext на Dispatchers.IO напечатайте "disk". Сразу после выхода из блока выведите "ui".

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить