kotlin: 用async/await优化多个suspend函数的执行时间时要先启动多个协程

一,代码:

        //处理按钮点击事件
        binding.button1.setOnClickListener {
            runBlocking {
                suspend fun getResult1(): String {
                    delay(3000L) // 模拟耗时操作
                    return "Result1"
                }

                suspend fun getResult2(): String {
                    delay(2000L) // 模拟耗时操作
                    return "Result2"
                }

                suspend fun getResult3(): String {
                    delay(1000L) // 模拟耗时操作
                    return "Result3"
                }

                val results: List<String>

                val time = measureTimeMillis {
                    println("begin async 1");
                    val result1 = async { getResult1() }
                    println("begin async 2");
                    val result2 = async { getResult2() }
                    println("begin async 3");
                    val result3 = async { getResult3() }

                    println("begin await 1");
                    val res1 = result1.await()
                    println("begin await 2");
                    val res2 = result2.await()
                    println("begin await 3");
                    val res3 = result3.await()
                    println("结束");

                    results = listOf(res1, res2, res3)
                }

                println("执行时间: $time")
                println(results)
            }
        }


        //处理按钮点击事件
        binding.button2.setOnClickListener {
            runBlocking {
                suspend fun getResult1(): String {
                    delay(3000L) // 模拟耗时操作
                    return "Result1"
                }

                suspend fun getResult2(): String {
                    delay(2000L) // 模拟耗时操作
                    return "Result2"
                }

                suspend fun getResult3(): String {
                    delay(1000L) // 模拟耗时操作
                    return "Result3"
                }

                val results: List<String>

                val time = measureTimeMillis {
                    println("begin async 1");
                    val result1 = async { getResult1() }
                    println("begin await 1");
                    val res1 = result1.await()

                    println("begin async 2");
                    val result2 = async { getResult2() }
                    println("begin await 2");
                    val res2 = result2.await()

                    println("begin async 3");
                    val result3 = async { getResult3() }
                    println("begin await 3");
                    val res3 = result3.await()

                    println("结束");
                    results = listOf(res1, res2, res3)
                }

                println("执行时间: $time")
                println(results)
            }
        }

用async/await优化多个suspend函数的执行时间,
要先启动这些协程,(button1点击后的处理)
如果顺序async/await执行,(button2点击后的处理)
则起不到优化时间的作用

二,运行结果:

button1点击后:

button2点击后:

 

posted @ 2025-07-26 11:38  刘宏缔的架构森林  阅读(11)  评论(0)    收藏  举报