包含协程公共API部分implementation"org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines"//依赖android支持库,协程Android平台的具体实现方式implementation"org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines"...
* Note how coroutine builders are scoped: if activity is destroyed or any of the launched coroutines in this method throws an exception, then all nested coroutines are cancelled. */ fun showSomeData() = launch { // <- extension on current activity, launched in the main thread // ... ...
我们通过线程池(CoroutineScheduler)创建了一个Thread线程(Worker),然后开始执行线程(runWorker),线程里面通过executeTask执行一个任务DispatchedTask,在执行任务的时候我们通过try..catch来保证任务安全执行runSafely,然后在DispatchedTask执行任务的时候,因为运行出现异常,所以在catch中通过resumeWith来告知结果线程出问题了。...
构造CoroutineScope使用到的CoroutineContext是一个特殊的集合,这个集合它既有Map的特点,也有Set的特点,集合的每一个元素都是Element,每个Element都有一个Key与之对应,对于相同Key的Element是不可以重复存在的,Element之间可以通过+号组合起来,后面我会详细介绍CoroutineContext这个特殊集合的结构,接下来我先简单讲解一下组...
publicfun<T>runBlocking(context:CoroutineContext=EmptyCoroutineContext,block:suspendCoroutineScope.()->T):T 1. runBlocking是一个顶层函数,可以在任意地方独立使用。它能创建一个新的协程同时阻塞当前线程,直到其内部所有逻辑以及子协程所有逻辑全部执行完成。常用于main函数和测试中。
我们通过线程池(CoroutineScheduler)创建了一个Thread线程(Worker),然后开始执行线程(runWorker),线程里面通过executeTask执行一个任务DispatchedTask,在执行任务的时候我们通过try..catch来保证任务安全执行runSafely,然后在DispatchedTask执行任务的时候,因为运行出现异常,所以在catch中通过resumeWith来告知结果线程出问题了。...
GlobalScope.launch()属于协程构建器Coroutine builders,Kotlin 中还有其他几种 Builders,负责创建协程: runBlocking:T 使用runBlocking顶层函数创建,会创建一个新的协程同时阻塞当前线程,直到协程结束。适用于main函数和单元测试 launch 创建一个新的协程,不会阻塞当前线程,必须在协程作用域中才可以调用。它返回的是一个该...
在调试 Kotlin 代码时,IntelliJ IDEA 允许您暂停执行并诊断协程中的代码可能存在的问题。 即使协程此刻没有运行,调试信息也可用。 协程调试器为您提供以下信息: 按dispatcher 分组的协程及其状态列表。 要获取列表,请转到协程选项卡。 顶级节点是 dispatchers,其次是 go coroutines。 对于每个 coroutine,您可以获取其当...
Coroutine Context: Coroutines always execute in some context that is a set of various elements. Below are main elements of coroutine context Job – models a cancellable workflow with multiple states and a life-cycle that culminates in its completion. Launch returns a Job object. When you launch...
Hello Coroutine 虽然不会死锁, 但是这个时候其实就是个单线程, 对于 IO 密集型任务无法起到并行加速的效果。 IO与Default的暧昧关系 如果想要真正地异步执行, 可以给runBlocking加个参数, 常用的有Dispatchers.Default和Dispatchers.IO: println("current thread:${Thread.currentThread.name}") runBlocking(Dispatchers...