НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
1304 of 1310 menu

Функция withContext

Функция withContext переключает контекст выполнения текущей корутины на указанный контекст, выполняет переданный блок кода в этом контексте и возвращает результат. Является suspend-функцией, поэтому может быть вызвана только из другой suspend-функции или корутины. Принимает два параметра: контекст типа CoroutineContext и блок кода для выполнения.

Импорт

import kotlinx.coroutines.withContext

Синтаксис

suspend fun <T> withContext( context: CoroutineContext, block: suspend CoroutineScope.() -> T ): T

Пример

Переключение на контекст ввода-вывода для выполнения сетевой операции:

import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import kotlinx.coroutines.runBlocking fun main() = runBlocking { val result = withContext(Dispatchers.IO) { // Имитация сетевого запроса "Data from network" } println("Result: $result") }

Результат выполнения кода:

Result: Data from network

Пример

Переключение между разными диспетчерами:

import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import kotlinx.coroutines.runBlocking fun main() = runBlocking { println("Current context: ${coroutineContext}") val ioResult = withContext(Dispatchers.IO) { println("IO context: ${coroutineContext}") "IO operation completed" } val defaultResult = withContext(Dispatchers.Default) { println("Default context: ${coroutineContext}") "Computation completed" } println("$ioResult, $defaultResult") }

Результат выполнения кода:

Current context: [BlockingCoroutine{Active}@1, BlockingEventLoop@2] IO context: [Dispatchers.IO, BlockingCoroutine{Active}@1] Default context: [Dispatchers.Default, BlockingCoroutine{Active}@1] IO operation completed, Computation completed

Пример

Использование withContext для обработки исключений:

import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import kotlinx.coroutines.runBlocking fun main() = runBlocking { try { val result = withContext(Dispatchers.IO) { throw RuntimeException("Network error") } } catch (e: Exception) { println("Caught exception: ${e.message}") } }

Результат выполнения кода:

Caught exception: Network error

Пример

Комбинирование withContext с другими suspend-функциями:

import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext import kotlinx.coroutines.runBlocking fun main() = runBlocking { val processedData = withContext(Dispatchers.Default) { delay(1000) // Имитация тяжелых вычислений "Processed data" } withContext(Dispatchers.IO) { delay(500) // Имитация сохранения данных println("Data saved: $processedData") } }

Результат выполнения кода:

Data saved: Processed data

Смотрите также

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