🎯 協程基礎
📖 協程入門
要使用協程,首先必須了解協程建構器。讓我們來了解最基本的三個建構器!
💡 runBlocking
基本用法
import kotlinx.coroutines.*
fun main() = runBlocking { // 啟動協程!
println("Hello")
delay(1000) // 等待 1 秒
println("World!")
}
特點
fun main() {
println("Before")
runBlocking {
delay(1000)
println("Inside coroutine")
}
println("After") // 等待協程結束
}
// Before
// (等待 1 秒)
// Inside coroutine
// After
注意:runBlocking 會阻塞當前執行緒!主要只在測試或 main 函式中使用。
🚀 launch
啟動非同步任務
fun main() = runBlocking {
launch {
delay(1000)
println("Task 1")
}
launch {
delay(500)
println("Task 2")
}
println("Main")
}
// Main
// (500ms 後) Task 2
// (1000ms 後) Task 1
返回 Job
fun main() = runBlocking {
val job = launch {
repeat(5) { i ->
println("Working... $i")
delay(500)
}
}
delay(1300)
println("取消任務!")
job.cancel() // 取消任務
job.join() // 等待取消完成
}
管理多個任務
fun main() = runBlocking {
val jobs = List(5) { i ->
launch {
delay(1000L * i)
println("任務 $i 完成")
}
}
jobs.forEach { it.join() } // 等待所有任務
println("所有任務結束!")
}