Функция launch

Функция launch является расширением для CoroutineScope и запускает новую корутину. Она возвращает объект типа Job, который можно использовать для управления жизненным циклом корутины. Параметры функции включают контекст корутины, режим запуска и блок кода для выполнения.

Импорт

kotlinimport kotlinx.coroutines.launch
import kotlinx.coroutines.CoroutineScope

Синтаксис

kotlinfun CoroutineScope.launch(
  context: CoroutineContext = EmptyCoroutineContext,
  start: CoroutineStart = CoroutineStart.DEFAULT,
  block: suspend CoroutineScope.() -> Unit
): Job

Пример

Запуск простой корутины:

kotlinimport kotlinx.coroutines.*

fun main() = runBlocking {
  launch {
    delay(1000)
    println("World!")
  }
  println("Hello")
}

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

kotlinHello
World!

Пример

Использование контекста корутины:

kotlinimport kotlinx.coroutines.*

fun main() = runBlocking {
  launch(Dispatchers.Default) {
    println("Running in ${Thread.currentThread().name}")
  }
}

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

kotlinRunning in DefaultDispatcher-worker-1

Пример

Использование возвращаемого объекта Job:

kotlinimport kotlinx.coroutines.*

fun main() = runBlocking {
  val job = launch {
    delay(1000)
    println("Job completed")
  }
  job.join()
  println("All done")
}

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

kotlinJob completed
All done

Пример

Отмена корутины через Job:

kotlinimport kotlinx.coroutines.*

fun main() = runBlocking {
  val job = launch {
    repeat(1000) { i ->
      println("Job: I'm working $i")
      delay(100)
    }
  }
  delay(250)
  job.cancel()
  println("Job cancelled")
}

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

kotlinJob: I'm working 0
Job: I'm working 1
Job: I'm working 2
Job cancelled

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

  • функцию async,
    которая запускает корутину с возвратом результата
  • функцию runBlocking,
    которая блокирует текущий поток до завершения корутины