Kotlin 协程:实现两个异步任务的协同并发
在 Kotlin 中,可以使用协程(Coroutines)来实现两个异步任务的协同并发。协程是一种轻量级的线程,可以在异步任务之间进行切换,并且能够方便地等待异步任务的结果。
以下是一个示例代码,演示了如何使用协程实现两个异步任务的协同并发,相互等待结果后执行:
import kotlinx.coroutines.*
fun main() {
// 创建一个协程作用域
runBlocking {
// 启动第一个异步任务,并等待其结果
val result1 = async { task1() }.await()
// 启动第二个异步任务,并等待其结果
val result2 = async { task2() }.await()
// 在两个异步任务都完成后,执行最终的操作
finalOperation(result1, result2)
}
}
suspend fun task1(): String {
// 模拟一个耗时的异步操作
delay(1000)
return 'Result from Task 1'
}
suspend fun task2(): Int {
// 模拟一个耗时的异步操作
delay(2000)
return 42
}
fun finalOperation(result1: String, result2: Int) {
// 执行最终的操作,使用两个异步任务的结果
println('Task 1 Result: $result1')
println('Task 2 Result: $result2')
}
在上面的示例中,我们使用 runBlocking 函数创建了一个协程作用域,然后使用 async 函数启动了两个异步任务 task1 和 task2。async 函数返回一个 Deferred 对象,我们可以使用 await 函数来等待异步任务的结果。
在 main 函数中,我们先等待 task1 的结果,然后再等待 task2 的结果。最后,我们调用 finalOperation 函数来执行最终的操作,使用两个异步任务的结果。
运行上面的示例代码,你会看到 task1 和 task2 会同时开始执行,并在各自完成后等待对方的结果,最后执行最终的操作。
需要注意的是,在协程中使用 delay 函数来模拟异步操作的耗时,以及在异步任务的函数中使用 suspend 关键字来标记函数为可挂起的。
原文地址: https://www.cveoy.top/t/topic/qvGc 著作权归作者所有。请勿转载和采集!