CoroutineScope 的取消也表示着在此作用域内开启的协程将会被全部取消. CoroutineScope 内还可以创建 子CoroutineScope , 不同类型的作用域作用域代表着在此作用域内协程最大运行的时间不同。 例如 GlobalScope 表示协程的最大可运行时间为整个APP的运行生命周期,Activity CoroutineScop...
代码示例 :在下面的代码中 , runBlocking 可以在普通的函数中执行 , 将主线程包装成了协程体 ; 但是 coroutineScope 函数 由于是 挂起函数 , 只能在 协程体 中使用 ; 该 coroutineScope 协程作用域 将 子协程 job0 和 job1 包裹起来 , coroutineScope 作用域需要等待 两个子协程执行完毕 , 该作用域才算执行...
public fun CoroutineContext.cancel(): Unit { this[Job]?.cancel() } 所以真正的逻辑是从CoroutineContex集合中取出Key为Job的实例,这个对应的就是上面创建LifecycleCoroutineScopeImpl实例时传入的SupervisorJob,它是CoroutineContext的其中一个子类。 这时再来看lifecycleScope相关的一些方法 lifecycleScope.launchWhenCrea...
下面代码中 创建协程作用域 时 , 使用的CoroutineScope(Job())进行创建 , 不是SupervisorJob, 因此 在子协程中抛出的异常 , 会传递给父协程 , 由父协程处理异常 , 父协程创建时使用的val job = scope.launch(coroutineExceptionHandler)代码 , 在协程构建器中传入了 协程异常处理器 , 因此该协程异常处理器 可...
【Kotlin回顾】19.Kotlin协程—CoroutineScope是如何管理协程的,每次创建时都会保证中一定存在Job元素,而就是通过Job来管理协程的;每次通过launch、
使用协程已经有较长的时间了,但一直停留在launch、async启动协程,suspend方法挂起的阶段。这段时间系统梳理Kotlin知识时才发现,对协程(仅对Kotlin)还有很多概念不甚了解。例如CoroutineScope对协程生命周期的重要性、协程父子结构的作用、结构化并发、一些Kotlin协程中约定俗称的规定等。
上一小节,学习了GlobalScope.launch、runBlocking、launch、coroutineScope这几种作用域构建器,都可以用来创建协程作用域。GlobalScope.launch和runBlocking函数是可以在任意地方调用,coroutineScope函数可以在协程作用域或挂起函数中调用,而launch函数只能在协程作用域中调用。
CoroutineScope() 创建一个协程作用域 实例 import kotlinx.coroutines.* suspend fun CoroutineScopeDefault(){ println("CoroutineScopeDefault start") // 延迟对象用来接受数据 val deferred = CompletableDeferred<List<String>>() // 用来管理协程的声明周期 val parentJob = Job() // 用来捕获以外 val excep...
* coroutine - 协程 * 本利用于演示协程基础,包括 CoroutineScope, 为 CoroutineScope 扩展方法, runBlocking, launch, async, await, suspend, withContext, 设置/获取 CoroutineScope 的名称 * * 进程是资源分配的最小单位,不同进程之间资源都是独立的
最常见的模式之一是先fork然后join,这正是coroutineScope()所做的。它创建了一个启动子任务的范围,...