但我们如果在runBlocking里面再开启子协程搭配async使用,就能达到主线程等待runblocking,runblocking等待子协程执行完的效果 async async是有返回值的协程调用方式,async的返回值是Deferred<T>,是延迟的意思 Java funtestAsync(){runBlocking {//启动协程varjob = GlobalScope.async {println("job1 start")Thread.sleep(1...
runBlocking { //launch 不会会返回执行结果 val job1 = launch { delay(200) Log.e(TAG, "onCreate: jbo1 finished.") } // async 会返回执行结果 val job2 = async { delay(200) Log.e(TAG, "onCreate: job2 finished.") "job2 result" } Log.e(TAG, "onCreate${ job2.await() }") ...
async 函数定义:从源码可以看出launch 和 async的唯一区别在于async的返回值 async 返回的是 Deferred 类型,Deferred 继承自 Job 接口,Job有的它都有,增加了一个方法 await ,这个方法接收的是 async 闭包中返回的值,async 的特点是不会阻塞当前线程,但会阻塞所在协程,也就是挂起 runBlocking 启动...
//新的协程是runBlocking的子协程,runBlocking会等子协程(launch和async分别开辟了一个子协成)执行完毕 @Test //kotlin中,函数名字可以有空格,但要使用反引号 fun `my test`()= runBlocking { //launch没有把表达式的执行结果返回 val job1 :Job= launch { delay(2000) println("job1 finished") } //async...
launch (Dispatchers.Main){ val result1 = async(Dispatchers.IO) { delay(2000) Log.d("test", "1协程执行—${Thread.currentThread().name}_id_${Thread.currentThread().id}") } val result2 = async(Dispatchers.IO) { delay(1000) Log.d("test", "2协程执行— ${Thread.currentThread()....
valjob = launch { // xxxx } valasync = async { // xxxx } async.cancel() } CoroutineScope & Job CoroutineScope 可以开启多个 Job , Job内可以存在多个 CoroutineScope ,关系如下图 以下代码仅是为了表达两者之间的关系,不推荐这样使用, 后面我们会讲到 supervisorScope...
1.launch与async构建器都用来启动新协程 launch:我们之前已经使用过了GlobalScope的launch来启动协程,它返回一个Job async:返回一个Deferred,它也是一个Job,但是可以使用await函数获得运行的结果 除了之前结构化并发中介绍的几种指定CoroutineScope的API外,我们还可以使用runBlocking函数来指定CoroutineScope,他会使用主线程来...
launch 启动协程 一个守护线程案例 launch 是非阻塞的 launch 拿不到执行结果 launch 的函数声明分析 runBlocking 启动协程 会阻塞当前线程的执行 不要在生产环境中使用 可以返回执行结果 async 启动协程 可以拿到协程的执行结果 async 和 launch 的区别 小结 ...
launch 的放回值是 Unit join() 会阻塞等待,但是没有返回值 async 可以有返回值 *.await 会阻塞等待返回值 返回值可以是任意类型 实例 @OptIn(DelicateCoroutinesApi::class) suspend fun main() { val globalScopeLaunchJob: Job = GlobalScope.launch { // 会有警告信息 // The expression is unused "valu...
一、launch 协程执行顺序控制 二、async 协程执行顺序控制 三、完整代码 源码地址 :https://download.csdn.net/download/han1202012/87183425 一、launch 协程执行顺序控制 如果需要通过 launch 协程构建器 启动多个协程 , 后面的协程需要等待前面的协程执行完毕 , 在启动靠后的协程 , 实现方案如下 : ...