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

Функция coroutineScope

Функция coroutineScope создает новую область видимости для корутин, наследуя контекст от родительской корутины. Является suspend-функцией и приостанавливает выполнение до тех пор, пока не завершатся все дочерние корутины внутри блока. Если какая-либо дочерняя корутина завершается с ошибкой, то все остальные дочерние корутины отменяются, а исключение пробрасывается наружу.

Импорт

import kotlinx.coroutines.coroutineScope

Синтаксис

suspend fun <R> coroutineScope( block: suspend CoroutineScope.() -> R ): R

Пример

Базовое использование coroutineScope для запуска дочерних корутин:

import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking fun main() = runBlocking { coroutineScope { launch { delay(1000) println("Child coroutine 1") } launch { delay(500) println("Child coroutine 2") } println("Parent coroutine") } println("All coroutines completed") }

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

Parent coroutine Child coroutine 2 Child coroutine 1 All coroutines completed

Пример

Возврат значения из coroutineScope:

import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking fun main() = runBlocking { val result = coroutineScope { delay(1000) "Result from coroutine scope" } println("Result: $result") }

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

Result: Result from coroutine scope

Пример

Обработка исключений в coroutineScope:

import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking fun main() = runBlocking { try { coroutineScope { launch { delay(500) throw RuntimeException("Error in child coroutine") } launch { delay(1000) println("This won't be printed") } } } catch (e: Exception) { println("Caught exception: ${e.message}") } }

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

Caught exception: Error in child coroutine

Пример

Параллельное выполнение операций в coroutineScope:

import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.async import kotlinx.coroutines.runBlocking fun main() = runBlocking { val result = coroutineScope { val deferred1 = async { delay(1000) "Hello" } val deferred2 = async { delay(500) "World" } "${deferred1.await()} ${deferred2.await()}" } println(result) }

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

Hello World

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

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