kotlin協(xié)程async與await
import kotlinx.coroutines.*
import kotlin.system.measureTimeMillis
fun main() {
val time = measureTimeMillis {
runBlocking {
/**
* async 是 CoroutineScope 擴展函數,async 和 launch 的區(qū)別在于async 可以返回協(xié)程結果,而 launch 不能。
* async默認值 CoroutineStart.DEFAULT 協(xié)程在聲明同時就被啟動(實際上還需被調度執(zhí)行,但可認為是立即就執(zhí)行)
* CoroutineStart.LAZY 不主動啟動協(xié)程,直到主動調用async.await()或async.satrt()后才啟動(懶加載模式)
* a.await() + b.await()導致兩個協(xié)程順序執(zhí)行
*/
val a = async(start = CoroutineStart.LAZY) {
delay(2000)
1
}
val b = async(start = CoroutineStart.LAZY) {
delay(3000)
2
}
/* 打破CoroutineStart.LAZY懶加載,協(xié)程立即投入執(zhí)行。
a.start()
b.start()
*/
println(a.await() + b.await())
}
}
println(time)
}
輸出:
3
3072
https://zhangphil.blog.csdn.net/article/details/129265638https://zhangphil.blog.csdn.net/article/details/129265638
kotlin協(xié)程、線程切換,函數方法委托_zhangphil的博客-CSDN博客runBlocking 內部啟動的3個協(xié)程做耗時操作,從輸出可以看到3個協(xié)程交叉并發(fā)執(zhí)行,runBlocking 會等到3個協(xié)程執(zhí)行結束后才退出,輸出結果有明確先后順序。一般編程的技法,比如,在Android中,假設在主線程中實現(xiàn)了一個函數,但該函數是耗時操作,毫無疑問,需要將這個函數的實現(xiàn)切入非主線程中操作,那么可以設計一種托管的函數,在托管的函數里面干臟活,處理完成后,把結果拋到主線程。結果1-a: 5 - tid:22。結果1-b: 5 - tid:24。結果2-a: 9 - tid:22。https://blog.csdn.net/zhangphil/article/details/130161705文章來源:http://www.zghlxwxcb.cn/news/detail-454010.html
https://zhangphil.blog.csdn.net/article/details/129250518https://zhangphil.blog.csdn.net/article/details/129250518文章來源地址http://www.zghlxwxcb.cn/news/detail-454010.html
到了這里,關于kotlin協(xié)程async與await的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!