文章目录
- 一、挂起函数串行执行
- 二、协程组合并发执行挂起函数
一、挂起函数串行执行
在协程体中 , 连续使用多个挂起函数 , 这些函数的执行是顺序执行的 , 挂起函数 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
二、协程组合并发执行挂起函数
如果想要两个挂起函数并发执行 , 并且同时需要两个函数的返回值 , 则使用 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