心里种花,人生才不会荒芜,如果你也想一起成长,请点个关注吧。
在 Kotlin 中,async
和 await
是用于并发编程的关键工具。它们通常用于协程中,以实现异步编程模式。通过使用 async
和 await
,你可以编写简洁的代码来处理并行任务,还可以控制任务的执行顺序来实现串行任务。
async
会启动一个新的协程,并在其中异步执行指定的代码块。它会立即返回一个 Deferred
对象,该对象代表未来的结果。await
是用于等待 Deferred
的结果,直到它的计算完成。
下面是一个简单的例子,演示如何使用 async
和 await
来并行执行两个异步任务:
import kotlinx.coroutines.*
fun main() = runBlocking {
val startTime = System.currentTimeMillis()
// 启动两个并行任务
val deferred1 = async { simulatedLongTask("Task 1", 1000L) }
val deferred2 = async { simulatedLongTask("Task 2", 1500L) }
// 等待两个任务都完成
val result1 = deferred1.await()
val result2 = deferred2.await()
println("Result1: $result1")
println("Result2: $result2")
val endTime = System.currentTimeMillis()
println("Total time: ${endTime - startTime} ms")
}
suspend fun simulatedLongTask(name: String, delayTime: Long): String {
println("$name started")
delay(delayTime) // 模拟长时间运行的任务
println("$name finished")
return "$name result"
}
在这个例子中,simulatedLongTask
模拟了一个长时间运行的任务。async
用于并行执行两个任务,这两个任务在等待完成时不会阻塞主线程。当所有任务完成时,await
收集它们的结果。
尽管 async
和 await
可以用于并行处理,但它们也可以用于顺序执行任务。如果你在调用 async
的地方使用 await
,那么代码将是同步执行的:
import kotlinx.coroutines.*
fun main() = runBlocking {
val startTime = System.currentTimeMillis()
// 启动串行任务
val result1 = async { simulatedLongTask("Task 1", 1000L) }.await()
val result2 = async { simulatedLongTask("Task 2", 1500L) }.await()
println("Result1: $result1")
println("Result2: $result2")
val endTime = System.currentTimeMillis()
println("Total time: ${endTime - startTime} ms")
}
suspend fun simulatedLongTask(name: String, delayTime: Long): String {
println("$name started")
delay(delayTime) // 模拟长时间运行的任务
println("$name finished")
return "$name result"
}
在这个串行任务的示例中,每个任务在前一个任务完成后才开始执行。虽然仍然使用了 async
,但由于 await
紧随其后,所以任务是顺序执行的。
async
启动多个任务,并且在所有任务启动后使用 await
收集结果。await
,以确保下一个任务只有在当前任务完成后才启动。launch
或 CoroutineScope
。END
点赞转发,让精彩不停歇!关注我们,评论区见,一起期待下期的深度好文!