0
点赞
收藏
分享

微信扫一扫

【Kotlin 协程】协程启动 ③ ( 协程组合并发 | 挂起函数串行执行 | 协程组合并发执行挂起函数 )


文章目录

  • ​​一、挂起函数串行执行​​
  • ​​二、协程组合并发执行挂起函数​​






一、挂起函数串行执行


在协程体中 , 连续使用多个挂起函数 , 这些函数的执行是顺序执行的 , 挂起函数 1 执行完毕后 , 才执行 挂起函数 2 ;

package kim.hsl.coroutine

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import kotlin.system.measureTimeMillis

class MainActivity : AppCompatActivity(){
val TAG = "MainActivity"

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

runBlocking {
// 调用 runBlocking 函数 , 可以将 主线程 包装成 协程

// measureTimeMillis 函数用于测量内部代码块执行的时间, 单位毫秒 ms
val time = measureTimeMillis {
val ret1 = hello1()
val ret2 = hello2()
Log.i(TAG, "两个返回值相加 ${ret1 + ret2}")
}
Log.i(TAG, "挂起函数执行耗时 ${time} ms")
}
}

suspend fun hello1(): Int {
delay(200)
return 1
}

suspend fun hello2(): Int {
delay(300)
return 2
}
}

执行结果 : 最终执行结果为 577 ms ,

00:14:00.962  I  两个返回值相加 3
00:14:00.963 I 挂起函数执行耗时 577 ms

【Kotlin 协程】协程启动 ③ ( 协程组合并发 | 挂起函数串行执行 | 协程组合并发执行挂起函数 )_android studio






二、协程组合并发执行挂起函数


如果想要两个挂起函数并发执行 , 并且同时需要两个函数的返回值 , 则使用 async 协程构建器 , 启动两个协程 , 在协程体中执行两个并发函数 ;

代码示例 :

package kim.hsl.coroutine

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import kotlinx.coroutines.async
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import kotlin.system.measureTimeMillis

class MainActivity : AppCompatActivity(){
val TAG = "MainActivity"

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

runBlocking {
// 调用 runBlocking 函数 , 可以将 主线程 包装成 协程

// measureTimeMillis 函数用于测量内部代码块执行的时间, 单位毫秒 ms
val time = measureTimeMillis {
val ret1 = async {
hello1()
}
val ret2 = async {
hello2()
}
Log.i(TAG, "两个返回值相加 ${ret1.await() + ret2.await()}")
}
Log.i(TAG, "挂起函数执行耗时 ${time} ms")
}
}

suspend fun hello1(): Int {
delay(200)
return 1
}

suspend fun hello2(): Int {
delay(300)
return 2
}
}

执行结果 : 启动两个 async 协程 , 并发执行两个挂起函数 , 耗时 355 ms , 达到了并发执行减少执行时间的目的 ;

00:18:50.081  I  两个返回值相加 3
00:18:50.081 I 挂起函数执行耗时 355 ms

【Kotlin 协程】协程启动 ③ ( 协程组合并发 | 挂起函数串行执行 | 协程组合并发执行挂起函数 )_协程_02


举报

相关推荐

破解 Kotlin 协程(6) - 协程挂起篇

破解 Kotlin 协程(2) - 协程启动篇

0 条评论