首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Kotlin 取消 ① ( 作用域取消 | 作用域子取消 | 通过抛出异常取消 | Job#cancel 函数 | 自定义异常取消 )

文章目录 一、取消 二、作用域取消 三、作用域子取消 四、通过抛出异常取消 1、Job#cancel 函数 2、默认异常取消 3、自定义异常取消 一、取消 ----...取消 : 取消作用域 : 取消 作用域 会将该作用域中的 所有 子 一同取消 ; 取消 : 子取消 不会影响 同一层级的 兄弟的执行 ; 通过抛出异常取消 : 取消通常会通过...; 然后 , 在作用域中 创建两个子 ; 最后 , 取消作用域 , 同时该作用域内的两个子也一并被取消了 ; package kim.hsl.coroutine import android.os.Bundle...:31:51.937 I job1 子执行完毕 10:31:51.938 I job0 子执行完毕 三、作用域子取消 ---- 单独取消 作用域 中的 子 , 作用域...中 启动了 job0 和 job1 两个协 , 取消了 job1 , job1 没有执行完毕 , job0 执行完毕 ; 四、通过抛出异常取消 ---- 1、Job#cancel

73820

【Kotlin 取消 ② ( CPU 密集型任务取消 | 使用 isActive 判定状态 | 使用 ensureActive 函数取消 | 使用 yield 函数取消 )

文章目录 一、CPU 密集型任务取消 二、使用 isActive 判定当前 CPU 密集型任务是否取消 三、使用 ensureActive 自动处理退出 四、使用 yield 函数检查状态并处理取消操作...一、CPU 密集型任务取消 ---- 在 中 , 定义在 kotlinx.coroutines 包下的 suspend 挂起函数 是可以取消的 ; 但是有一种任务 , CPU 密集型任务..., 大量的临时数据会丢失 , 因此在中 , 无法直接取消 CPU 密集型任务 , 这是对的保护措施 ; CPU 密集型任务取消示例 : 在下面的 任务 中 , 循环 10000000...Log.i(TAG, "退出作用域") } } } 执行结果 : 在执行任务过程中 , 取消 , 但是没有取消成功 , 自动执行完毕 ; 18:45:33.896...调度), * 无论[CoroutineDispatcher.isDispatchNeeded]的结果如何,总是挂起以便稍后恢复。

94820
您找到你想要的搜索结果了吗?
是的
没有找到

破解 Kotlin (5) - 取消

关键词:Kotlin 取消 任务停止 的任务的取消需要靠内部调用的协作支持,这就类似于我们线程中断以及对中断状态的响应一样。 1. 线程的中断 我们先从大家熟悉的话题讲起。...之后再来执行后面的这段代码(也就是 log(2));而在这期间,我们在 ③ 处对刚才启动的触发了取消,因此在 ② 处的 delay还没有回调的时候就被取消了,因为 delay 可以响应取消,因此...父。 4.2 如何正确的将回调转换为 前面我们提到既然 adapt 方法不是 suspend 方法,那么我们是不是应该在其他位置创建呢?...如果 cancel 抛异常而没有捕获的话,那么等同于体内部抛出异常,具体如何传播看所在作用域的相关定义了。...最后我们还分析了一下 Retrofit 的扩展的一些问题和解决方法,这个例子也进一步可以引发我们对作用域以及如何将现有程序化的思考。

1.7K50

中的取消和异常 | 取消操作详解

job1.cancel() 被取消的子并不会影响其余兄弟 通过抛出一个特殊的异常 CancellationException 来处理取消操作。...有关如何执行此操作的更多信息,请参考下面的处理取消的副作用一节。 在底层实现中,子会通过抛出异常的方式将取消的情况通知到它的父级。父通过传入的取消原因来决定是否来处理该异常。...让您的可以被取消 您需要确保所有使用处理任务的代码实现都是协作式的,也就是说它们都配合取消做了处理,因此您可以在任务处理期间定期检查是否已被取消,或者在处理耗时任务之前就检查当前是否已取消...await 的角色是负责在处理结果出来之前一直将挂起,因为如果取消了那么就不会继续进行计算,也就不会有结果产生。...代码的取消需要是协作式的,因此请将代码更新为对取消操作以延后的方式进行检查,并避免不必要的操作。

2K20

Kotlin -暂停与取消

本次主要学习如何进行取消操作以及超时后的处理。 取消 cancel() 我们在进行开发的过程中。往往会由于各种需求会需要控制后台的细粒度。比如,界面关闭了。...job.join()// 等待事项执行结束 println("整个流程结束了。")...} //输出 主线程:开始中断 执行:0 执行:1 执行:2 执行:3 主线程:中断结束 整个流程结束了。 我们可以主动获取到对象。...上面的例子,我们调用了取消。 但是仍然打印了两个输出,才在最后结束。 那么,我们如果面临这种情况下,仍然需要在结束的时候关闭如何处理?...} 主要是想告诉我们是可以在运行的时候进行取消。但是相关方法我们在创建定义的时候,需要考虑如果取消如何处理数据。

55430

【Kotlin 取消 ③ ( finally 释放资源 | 使用 use 函数执行 Closeable 对象释放资源操作 | 构造无法取消任务 | 构造超时取消任务 )

文章目录 一、释放资源 二、使用 use 函数执行 Closeable 对象释放资源操作 三、使用 withContext(NonCancellable) 构造无法取消任务 四、使用 withTimeoutOrNull...函数构造超时取消任务 一、释放资源 ---- 如果 中途取消 , 期间需要 释放占有的资源 ; 如果执行的任务中 , 需要 执行 关闭文件 , 输入输出流 等操作 , 推荐使用...Log.i(TAG, "取消任务") // 取消任务 job1.cancelAndJoin() Log.i(TAG, "退出作用域...(TAG, "取消任务") // 取消任务 job1.cancelAndJoin() Log.i(TAG, "退出作用域...23:12:32.093 I 退出作用域 四、使用 withTimeoutOrNull 函数构造超时取消任务 ---- 使用 withTimeout 函数 , 可以构造超时取消任务

1.2K10

kotlin--的启动和取消

kotlin的有4中启动模式 1.DEFAULT:创建后,立即开始调度,在调度前如果被取消,直接进入取消响应状态 2.ATOMIC:创建后,立即开始调度,执行到第一个挂起点之前不响应取消...3.LAZY:只有被需要时,包括主动调用的start、join或await等函数时才会开始调度,如果调度前被取消,那么该将直接进入异常结束状态 4.UNDISPATCHED:创建后立即在当前函数调用栈中执行...虽然无法直接访问这些状态,但我们可以通过访问Job的属性:isActive、isCanceled和isCompleted 8.的生命周期 如果处于活跃状态,运行出错或取消都会将该置为取消中状态...当所有子都完成后,会进入已取消状态,此时isCompleted=true。...二、取消 1.取消 1.取消作用域会取消它的子,CoroutineScope是创建一个全新的上下文,和coroutineScope作用域是不同的,作用域构建器使用的是父的上下文 fun

92230

【Kotlin 】Flow 异步流 ⑥ ( 调用 Flow#launchIn 函数指定流收集 | 通过取消流收集所在的取消流 )

文章目录 一、调用 Flow#launchIn 函数指定流收集 1、指定流收集 2、Flow#launchIn 函数原型 3、代码示例 二、通过取消流收集所在的取消流 一、调用 Flow...是 任务对象 , 可调用 Job#cancel 函数取消任务 ; 2、Flow#launchIn 函数原型 Flow#launchIn 函数原型 : /** * 终端流操作符,在[作用域]中...:00.940 2950-3079/kim.hsl.coroutine I/System.out: 接收到事件 : 3, 当前线程 : DefaultDispatcher-worker-2 二、通过取消流收集所在的取消流...---- Flow 流的 收集元素 操作 , 是在中执行 , 将 取消 , 即可将 Flow 流收集操作 取消 , 也就是 将 Flow 流取消 ; 代码示例 : 使用 withTimeoutOrNull...(2000) 创建一个 , 该在 2000ms 后自动超时取消 , 同时在其中进行 流收集 的操作也一并取消 ; package kim.hsl.coroutine import android.os.Bundle

69820

如何取消网站备案 取消网站备案的流程

当网站经营了一段时间以后,网站的经营者不想使用网站,想要将网站关停,而网站关停后需要取消网站备案,以此避免后续的相关问题。然而大多数的站主在关闭网站后,并不知道如何取消网站备案?...那么接下来就给大家介绍一下网站关停后如何取消备案的方法。 如何取消网站备案 当网站经营了一段时间以后,网站的经营者不想使用网站,想要将网站关停,而网站关停后需要取消网站备案,以此避免后续的相关问题。...然而大多数的站主在关闭网站后,并不知道如何取消网站备案?那么接下来就给大家介绍一下网站关停后如何取消备案的方法。 如何取消网站备案 如何取消网站备案?...取消网站备案的流程取消网站备案之前,首先要检查自己的网站是否备案,如果之前没有备案过,那么可以按照取消网站备案的正常流程进行取消,若是之前备案过,但是网站处于关闭无法打开的情况下,且主体下有且只有一个已经备案过的域名...以上就是关于如何取消网站备案的相关操作与流程

29K20

Go语言通知退出(取消)的几种方式

**使用 sync.WaitGroup**:虽然 WaitGroup 本身不用于发送取消信号,但它可以用来等待一组完成,通常与其他方法(如通道)结合使用来控制的退出。 1....使用 sync.WaitGroup 控制退出 sync.WaitGroup 主要用于等待一组的完成。其不直接提供通知退出的机制,但可以与其他方法(如通道)结合使用来控制的退出。...: https://blog.csdn.net/whatday/article/details/113771225 [5] Go 程序员面试笔试宝典-context 如何取消: https://golang.design.../go-questions/stdlib/context/cancel/ [6] 如何退出 goroutine (其他场景): https://geektutu.com/post/hpg-exit-goroutine.html...[7] go取消: https://www.google.com/search?

19710

【Kotlin 启动 ⑥ ( 生命周期状态 | 新创建 New | 活跃 Active | 完成中 Completing | 已完成 Completed | 取消中 | 已取消 )

Canceling 已取消 Cancelled : 通过调用 Job#isCancelled 获取当前是否处于 取消状态 ; 之前的博客 【Kotlin 启动 ④ ( 启动模式 | 构建器启动模式参数...状态 , 然后再进入 已取消 Cancelled 状态 ; 三、生命周期状态改变 ---- 通过 launch 或 async 构建器 函数 创建 时 状态为 新创建 New 状态 ;... 调度执行 后 会变成 活跃 Active 状态 ; 处于活跃状态的 有两个分支 , 分别是 完成 和 取消 : 完成分支 : 当有 子 完成时 , 会进入 完成中 Completing...状态 , 此时会等待其它子执行完毕 , 如果 所有的子都执行完毕 , 则进入 已完成 Completed 状态 ; 取消分支 : 调用 Job#cancel() 函数 取消 ,...会进入到 取消中 Canceling 状态 , 此时不会立刻取消 , 因为该中可能还有多个子 , 需要等待 所有子取消后 , 才能进入 已取消 Cancelled 状态 ;

61310

中的取消和异常 | 核心概念介绍

本次系列文章 "中的取消和异常" 也是 Android 相关的内容,我们将与大家深入探讨中关于取消操作和异常处理的知识点和技巧。...任何时候都可通过调用 scope.cancel() 来取消正在进行的工作 (正在运行的)。...在下面的代码片段中,除了通过 CoroutineScope 创建新的,来看看如何中创建更多: val scope = CoroutineScope(Job() + Dispatchers.Main...当所有的子都完成后,会进入已取消 (Cancelled) 状态,此时 isCompleted = true。...现在,大家了解了的一些基本概念,在接下来的文章中,我们将在第二篇继续深入探讨取消、第三篇探讨的异常处理。

95210

中的取消和异常 | 异常处理详解

接下来,本文将会解释异常是如何间传播的,以及一些处理它们的方法,从而帮您做到一切尽在掌握。...⚠️ 为了能够更好地理解本文所讲的内容,建议您首先阅读本系列中的第一篇文章: 中的取消和异常 | 核心概念介绍。 某个协突然运行失败怎么办?...当一个由于一个异常而运行失败时,它会传播这个异常并传递给它的父级。接下来,父级会进行下面几步操作: 取消它自己的子级; 取消它自己; 将异常传播并传递给它的父级。...异常会到达层级的根部,而且当前 CoroutineScope 所启动的所有都会被取消。...如果它的子抛出了一个异常,就会导致 UI 作用域 (UI scope) 被取消,并且由于被取消的作用域无法开启新的,所有的 UI 组件都会变得无法响应。

1K20

中的取消和异常 | 驻留任务详解

在本系列第二篇文章 中的取消和异常 | 取消操作详解 中,我们学到,当一个任务不再被需要时,正确地退出十分的重要。...因此,您就不会希望任务被取消,例如,向数据库写入数据或者向您的服务器发送特定类型的请求。 下面我们就来介绍实现此类情况的模式。 还是 WorkManager? 会在您的应用进程活动期间执行。...我们想要此操作的运行时长超过 viewModelScope,这个目的要如何达成呢? 我们需要在 Application 类中创建自己的作用域,并在由它启动的中调用这些操作。...applicationScope 必须包含一个 SupervisorJob(),这样中的故障便不会在层级间传播 (见本系列第三篇文章: 中的取消和异常 | 异常处理详解): class MyApplication...❌ ✅ 使用 NonCancellable 正如您在本系列第二篇文章 中的取消和异常 | 取消操作详解 中看到的,您可以使用 withContext(NonCancellable) 在被取消中调用挂起函数

1.4K20

【EventBus】EventBus 源码解析 ( 取消订阅 )

文章目录 一、取消订阅 二、取消订阅 unsubscribeByEventType 方法 一、取消订阅 ---- 【EventBus】EventBus 使用示例 ( 最简单的 EventBus 示例 )...示例中 , 在 MainActivity 中调用 // 取消注册 EventBus.getDefault().unregister(this); 方法 , 取消订阅 ;...取消订阅是以对象为单位的 , 一旦调用了 EventBus 的 unregister 方法 , 并传入 订阅者对象 , 则该订阅者对象中的所有 订阅方法 , 都会被 取消订阅 ; 在 【EventBus...>, CopyOnWriteArrayList> subscriptionsByEventType 集合中移除相应的数据 ; 如何根据 订阅者对象 找到对应的数据 , 就需要依靠...订阅者类及相关的订阅方法 , 即可完成 取消订阅的操作 ; public class EventBus { /** 从所有事件类中注销给定订阅服务器。

44310

【Kotlin 底层实现 ③ ( 结构化并发 | MainScope 作用域 | 取消作用域 | Activity 实现 CoroutineScope 作用域接口 )

文章目录 一、MainScope 作用域 二、取消 MainScope 作用域 三、Activity 实现 CoroutineScope 作用域接口 常见的 CoroutineScope...是任务调度器 , 执行挂起函数 , 系统会自动分配一个 任务调度器 ; 二、取消 MainScope 作用域 ---- 调用 MainScope 作用域 的 cancel 函数 , 即可取...消该 作用域 , 同时 该作用域内的任务不管是否执行完毕 都一并取消 , 该函数是 CoroutineScope 的扩展函数 ; /** * 取消这个范围,包括它的作业和它的所有子任务...启动的任务 , 如果取消 mainScope 作用域 , 则在该 作用域 中执行的 任务 , 都会被取消 ; 挂起函数中途被取消 会抛出 JobCancellationException...作用域 ; override fun onDestroy() { super.onDestroy() // 在 Activity 销毁前取消作用域

99910
领券