Kotlin 的 coroutine 練習

練習題目,將下面這段程式由 Thread 改成 coroutine 。
出處:https://developer.android.com/codelabs/basic-android-kotlin-training-introduction-coroutines#4

fun main() {
   val states = arrayOf("Starting", "Doing Task 1", "Doing Task 2", "Ending")
   repeat(3) {
       Thread {
           println("${Thread.currentThread()} has started")
           for (i in states) {
               println("${Thread.currentThread()} - $i")
               Thread.sleep(50)
           }
       }.start()
   }
}

練習解答一:

import kotlinx.coroutines.*

val states = arrayOf("Starting", "Doing Task 1", "Doing Task 2", "Ending")

suspend fun generateThread(){
    println("${Thread.currentThread()} has started")
    for (i in states) {
       println("${Thread.currentThread()} - $i")
       delay(100)
    }
}

fun main() {
    runBlocking {
       repeat(3){
               async {generateThread()}
       }
    }
}

練習解答二:

fun main() {
   val states = arrayOf("Starting", "Doing Task 1", "Doing Task 2", "Ending")
   repeat(3) {
       GlobalScope.launch {
           println("${Thread.currentThread()} has started")
           for (i in states) {
               println("${Thread.currentThread()} - $i")
               delay(50)
           }
       }
   }
}

可以在 Kotlin Playground 裡面線上練習真方便。


留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *