SupervisorJob 、 Job 可以在开启一个协程时设置任务类型,默认开启一个协程方式为 launch(){...} 内部实现为Job(coroutineContext[Job]),也可以通过 launch(SupervisorJob(coroutineContext[Job])) { } , async(SupervisorJob(coroutineContext[Job])) { } 方式指定Job类型,它的...
但我们如果在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() }") ...
//新的协程是runBlocking的子协程,runBlocking会等子协程(launch和async分别开辟了一个子协成)执行完毕 @Test //kotlin中,函数名字可以有空格,但要使用反引号 fun `my test`()= runBlocking { //launch没有把表达式的执行结果返回 val job1 :Job= launch { delay(2000) println("job1 finished") } //async...
kotlin之协程(五),launch 函数以及协程的取消与超时 kotlin之协程(七),协程中relay、yield 区别 launch 函数定义:async 函数定义:从源码可以看出launch 和 async的唯一区别在于async的返回值 async 返回的是 Deferred 类型,Deferred 继承自 Job 接口,Job有的它都有,增加了一个方法 await ,这个方法...
1.launch与async构建器都用来启动新协程 launch:我们之前已经使用过了GlobalScope的launch来启动协程,它返回一个Job async:返回一个Deferred,它也是一个Job,但是可以使用await函数获得运行的结果 除了之前结构化并发中介绍的几种指定CoroutineScope的API外,我们还可以使用runBlocking函数来指定CoroutineScope,他会使用主线程来...
launch 启动协程 一个守护线程案例 launch 是非阻塞的 launch 拿不到执行结果 launch 的函数声明分析 runBlocking 启动协程 会阻塞当前线程的执行 不要在生产环境中使用 可以返回执行结果 async 启动协程 可以拿到协程的执行结果 async 和 launch 的区别 小结 ...
async 并发执行 在上面的例子中,我们按顺序执行,但我们实际开发中,更多的是希望并行执行,借助于async我们就可以实现。 注意 在概念上,async就类似于launch。它启动了一个单独的协程,这是一个轻量级的线程并与其它所有的协程一起并发的工作。不同之处在于launch返回一个Job并且不附带任何结果值,而async返回一个Deferre...
3、launch 构建器示例 4、Deferred 类 5、async 构建器示例 二、协程构建器示例 一、协程构建器 1、协程构建器概念 协程 需要 协程构建器 来启动 , 协程构建器 就是 CoroutineScope 协程作用域的两个扩展函数 ; ...
async:启动新协程,async的返回值为Deferred,Deferred继承至Job,可通过调用Deferred::await获取协程的执行结果,其中await是挂起函数。 在一个常规函数启动协程,通常使用的是launch,因为常规函数无法调用Deferred::await,在一个协程或者挂起函数内部开启协程可以使用async。