Модификатор suspend

Модификатор suspend применяется к функциям, которые могут приостанавливать выполнение корутин без блокировки потока. Такие функции могут содержать другие suspend-функции или использовать конструкции типа delay. Они работают только внутри корутин или других suspend-функций.

Синтаксис

kotlinsuspend fun functionName(parameters): ReturnType {
  // тело функции
}

Пример

Простая suspend-функция с задержкой:

kotlinimport kotlinx.coroutines.*

suspend fun delayedGreeting() {
  delay(1000)
  println("Hello after delay")
}

fun main() = runBlocking {
  delayedGreeting()
}

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

kotlinHello after delay

Пример

Suspend-функция, вызывающая другую suspend-функцию:

kotlinsuspend fun firstTask() {
  delay(500)
  println("First task completed")
}

suspend fun secondTask() {
  delay(300)
  println("Second task completed")
}

suspend fun runTasks() {
  firstTask()
  secondTask()
}

fun main() = runBlocking {
  runTasks()
}

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

kotlinFirst task completed
Second task completed

Пример

Suspend-функция с возвращаемым значением:

kotlinsuspend fun calculateSum(a: Int, b: Int): Int {
  delay(200)
  return a + b
}

fun main() = runBlocking {
  val res = calculateSum(5, 7)
  println(res)
}

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

kotlinInt 12

Пример

Использование suspend-функции с корутинами:

kotlinsuspend fun fetchData(): String {
  delay(1000)
  return "Data loaded"
}

fun main() = runBlocking {
  val job = launch {
    val data = fetchData()
    println(data)
  }
  println("Waiting for data...")
  job.join()
}

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

kotlinWaiting for data...
Data loaded

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

  • функцию launch,
    которая запускает новую корутину
  • функцию async,
    которая запускает корутину с возвращаемым значением