Ключевое слово yield
Ключевое слово yield используется внутри корутин
для добровольной приостановки текущей корутины и предоставления
возможности выполнения другим корутинам, работающим в том же
диспетчере. Это позволяет реализовать кооперативную многозадачность.
Импорт
kotlinimport kotlinx.coroutines.yield
Синтаксис
kotlinsuspend fun yield(): Unit
Пример
Простое использование yield для приостановки корутины:
kotlinimport kotlinx.coroutines.*
fun main() = runBlocking {
launch {
for (i in 1..3) {
println("Coroutine 1: $i")
yield()
}
}
launch {
for (i in 1..3) {
println("Coroutine 2: $i")
yield()
}
}
}
Результат выполнения кода:
kotlinCoroutine 1: 1
Coroutine 2: 1
Coroutine 1: 2
Coroutine 2: 2
Coroutine 1: 3
Coroutine 2: 3
Пример
Использование yield в цикле для обработки длительных операций:
kotlinimport kotlinx.coroutines.*
fun main() = runBlocking {
val job = launch {
for (i in 1..1000) {
if (i % 100 == 0) {
println("Processed $i items")
yield()
}
}
}
job.join()
}
Результат выполнения кода:
kotlinProcessed 100 items
Processed 200 items
Processed 300 items
Processed 400 items
Processed 500 items
Processed 600 items
Processed 700 items
Processed 800 items
Processed 900 items
Processed 1000 items
Пример
yield в комбинации с другими функциями приостановки:
kotlinimport kotlinx.coroutines.*
suspend fun processItem(item: Int) {
println("Processing item $item")
delay(100)
yield()
}
fun main() = runBlocking {
val items = listOf(1, 2, 3, 4, 5)
items.forEach { item ->
launch {
processItem(item)
}
}
}
Результат выполнения кода:
kotlinProcessing item 1
Processing item 2
Processing item 3
Processing item 4
Processing item 5