网站建设推广 公司一般纳税人企业所得税

pingmian/2026/1/25 7:27:59/文章来源:
网站建设推广 公司,一般纳税人企业所得税,投资做网站利润分析,网站建设的上市公司一、概念 对于每一个由协程构建器开启的协程#xff0c;都会返回一个 Job 实例用来管理协程的生命周期。launch()直接返回 Job实现#xff0c;async() 返回的 Deferred 实现了 Job接口。 Job public fun start(): Boolean public fun cancel(cause: CancellationException? …一、概念 对于每一个由协程构建器开启的协程都会返回一个 Job 实例用来管理协程的生命周期。launch()直接返回 Job实现async() 返回的 Deferred 实现了 Job接口。 Job public fun start(): Boolean public fun cancel(cause: CancellationException? null) 取消 Job 会抛异常默认可空也可以自定义job.cancel(CancellationException(取消))。它不会立马就被取消先进入 cancelling。协程作用域和协程上下文的扩展函数cancel()底层都是调用的它。 public suspend fun join() 挂起当前协程直到 Job 完成。 public suspend fun Job.cancelAndJoin() 挂起当前协程直到 Job 取消完成。 public fun invokeOnCompletion(handler: CompletionHandler): DisposableHandle Job结束后调用该回调不管是cancelled还是competed都会回调。 Deferred public suspend fun await(): T 挂起当前协程直到 Deferred 完成。 Await.kt joinAll( ) public suspend fun joinAll(vararg jobs: Job): Unit jobs.forEach { it.join() } 挂起当前协程直到传入的 Job 都执行完。 public suspend fun CollectionJob.joinAll(): Unit forEach { it.join() } 挂起当前协程直到集合中的 Job 都执行完。 awaitAll( ) public suspend fun T awaitAll(vararg deferreds: DeferredT): ListT 挂起当前协程直到传入的 Deferred 都执行完。 public suspend fun T CollectionDeferredT.awaitAll(): ListT 挂起当前协程直到集合中的 Deferred  都执行完。 二、生命周期 如果Job是通过协程构建器创建的Active就是协程主体运行时的状态在这个状态下我们可以启动子协程。一般协程都是在Active状态下启动只有那些延迟启动的才会以New状态启动。         当Job完成时会进入Completing状态等待所有子协程完成然后进入Compelted状态。         如果Job在Active或Completing状态下取消或者异常会进入到Cancelling状态供我们做一些资源释放等工作然后进入到Cancelled状态。 没有直接的生命周期函数可供调用而是使用以下三个属性去做判断 Job的状态/函数判断isActiveisCompletedisCancelledNew 新创建optional initial statefalsefalsefalseActive 活跃default initial statetruefalsefalseCompleting 完成中transient statetruefalsefalseCancelling 取消中transient statefalsefalsetrueCancelled 已取消final statefalsetruetrueCompeleted 已完成final statefalsetruefalse 三、协程的取消 Java 线程其实没有提供任何机制来安全地终止线程Thread 类提供了一个 interrupt() 方法用于中断线程的执行并不意味着立即停止目标线程正在进行的工作而只是传递了请求中断的消息然后由线程在下一个合适的时机中断自己。         仅仅终止线程是一个糟糕的方案协程提供了一个 cancel() 函数来取消Job但并不是一定能取消。协程的取消是协作的一段协程代码必须协作才能被取消。所有 kotlinx.coroutines 中的挂起函数都是可被取消的它们检查协程的取消并在取消时抛出 CancellationException。如果协程正在执行计算任务并且没有检查取消的话那么它是不能被取消的。 3.1 取消的原理 public interface Job : CoroutineContext.Element {//通过序列保存了所有子Job的引用所以具有父子层级结构public val children: SequenceJob }//子Job接口 public interface ChildJob : Job {//提供了父Job取消自己的函数public fun parentCancelled(parentJob: ParentJob) }//父Job接口 public interface ParentJob : Job {//提供了获取子Job被取消原因的函数public fun getChildJobCancellationCause(): CancellationException }//Job的实现类同时实现了ChildJob和ParentJob说明一个Job对象既可以是父Job也可以是子Job public open class JobSupport constructor(active: Boolean) : Job, ChildJob, ParentJob, SelectClause0 {internal var parentHandle: ChildHandle? //当前协程的父协程帮助类当前协程作为子协程 }3.2 取消的状态 挂起函数挂起点会在执行的时候检查协程的状态其它情况需要手动调用 job.isAlive 或 job.ensureActive() 来检查。 运行出错或者调用cancel()后该Job会在遇到第一个挂起点开始取消并抛出CancellationException异常 先处于Cancelling状态没有挂起点或检查措施便不会响应取消操作直至代码块执行完毕。才能继续执行其它否则会存在其它协程并发执行。手动调用join()或遇到代码中的第一个挂起点协程才会真正被取消再处于Cancelled状态。推荐使用cancelAndJoin()简化调用。一旦该Job被取消该Job下的子job也会一并取消但父Job和兄弟Job不受影响该Job不能再用作任何新Job的父Job不能开启新协程。 3.3 取消的异常处理 协程通过抛出一个 CancellationException异常 来取消 Job。cancel() 可以传参使用不同的异常来指定原因需要是 CancellationException 的子类才能取消协程。该异常不会导致父协程或兄弟协程的取消可以使用 try-catch-finally 去捕获处理释放资源推荐使用标准函数 use() 会自动关闭资源。 suspend fun main() runBlocking {//没有继承父协程的上下文有自己的作用域因此 runBlocking 不会等待 GlobalScope 执行完再结束。val job GlobalScope.launch {try {//耗时操作}catch (e:Exception){//处理异常}finally{//释放资源}}delay(1000) //让job运行一下再取消 // job.cancel() //抛异常 JobCancellationException // job.join() //挂起函数这样就会等 GlobalScope 取消完再继续执行job.cancelAndJoin() //简写 } 3.4 无法直接取消的情况CPU密集型、没有挂起点 由于调用cancel()操作后Job会处于Cancelling状态此时只需判断Job是否处于活跃状态于便可以响应cancel()操作。 CPU密集型任务无法直接被cancel()取消因为直接取消会丢失临时计算数据。可以通过对Job状态的判断来响应cancel()操作。Job的取消发生在挂起点上没有挂起点便不会响应cancel()操作当我们使用协程却没有调用任何挂起函数的时候做阻塞操作、神经网络学习便会发生这种情况。 isActive 加在判断里 public val CoroutineScope.isActive: Boolean     get() coroutineContext[Job]?.isActive ?: true 判断Job是否处于活跃状态尚未完成且尚未取消。 ensureActive() 写在函数里 public fun CoroutineScope.ensureActive(): Unit coroutineContext.ensureActive() 返回coroutineContext扩展函数调用Job的函数最终调用的是 !isActiveJob处于非活跃状态就报错CancelllationException。 yield() 不至于抢占太多线程让其它协程拿不到执行权 public suspend fun yield(): Unit 会检查所在协程的状态如果已经取消则报错 CancellationException此外会尝试让出线程执行权。 suspend fun main() runBlocking {val job launch(Dispatchers.Default) { //该协程中无挂起点while (isActive) { //判断出false便会取消ensureActive() //检测出false便会取消yield() //不至于因为任务太抢占资源导致其它协程拿不到线程执行权println(CPU密集任务)}}delay(1000) //让job运行一会儿后再取消println(等完)job.cancelAndJoin() //cancel()操作会将 isActive falseprintln(结束) } 3.5 一定无法取消的情况 由于我们可以捕获CancellationException异常在 Job 真正结束前可以做一些事情由于 Job 响应 cancel() 后已经处于 Cancelling状态此时启动一个新协程会被忽略或者调用挂起函数会抛异常CancellationException是无法被执行的。 方式①指定协程上下文为NonCancellable来得到一个常驻Job不响应 cancel()操作。方式②使用invokeOnCompletion()函数当 Job 处于Cancelled状态或Compeleted状态时会执行回调。形参it是一个异常没有异常值为null协程被取消值为 CancellationException。 withContext(NonCancellable){ //不会响应取消 } job.invodeOnCompletion{//回调代码 } 3.6 自定义挂起函数定义取消的回调 详见回调函数改挂起函数 //定义 suspend fun getResource():StudentBean suspendCancellableCoroutine{ continuation -request(object : ICallBack{override fun onSuccess(data:String){continuation.resume(data)}override fun onFailure(exception:Throwable){continuation.resumeWithException(exception)} }) //定义协程取消时应该做的操作continuation.invokeOnCancellation{ //TODO... } }//使用 suspend main() runBlocking{try{viewModelScope.launch{val bean getResource()}}catch(e : Exception){e.printStackTrace()} } 四、自定义Job 协程构建器基于其父Job构建自己的Job如果自定义了Job便不再适用父子关系失去了结构化并发父协程不会等待子协程完成。 fun main(): Unit runBlocking {val scope CoroutineScope(Job()) // test1(scope) //打印测试1---子协程1test2(scope) //打印测试2---子协程1 、测试2---子协程2delay(1000) }fun test1(scope: CoroutineScope) {scope.launch {launch {println(测试1---子协程1)scope.cancel()}launch {println(测试1---子协程2)}} }fun test2(scope: CoroutineScope) {scope.launch {launch(Job()) { //此处添加了一个job参数println(测试2---子协程1)scope.cancel()}launch {println(测试2---子协程2)}} }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/85919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设方案计划书人员规划文章作者标签WordPress

题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5]示例 2: 输入…

国外室内设计案例网站线上宣传的方式

Blade模版简介 Blade模版的好处: 模版继承(template inheritance)视图片段(sections)部分指令: extend(‘xxx’)为子页面指定所继承的页面布局模版section(‘xxx’)为子页面提供所继承的页面中指定的部分…

刚做的网站关键词就上来了什么是网络营销产生的基础

根据新浪报道,据新华社10月14日电 利用当网管的机会,破解密码,非法进入交警计算机系统为他人删除车辆交通违法记录牟利。辽宁省鞍山市铁西区检察院透露,当地某公司员工程尚军因涉嫌破坏计算机信息系统罪,已于10月初被依…

会议响应式网站开发服务公司取名字大全

什么是多态?父类指针即根据指向的不同对象,响应同一消息(函数调用),产生不同行为。多态三要素?1,继承2,虚函数重写3,父类指针(引用)指向子类对象多态的实现很简答,让我们来看一段代码…

保定php网站制作湖南省建设厅

参考:https://blog.csdn.net/koulongxin123/article/details/122676149 1.什么是强化学习? (1)定义 基于环境的反馈而行动,通过不断与环境的交互、试错,最终完成特定目的或者使得整体行动收益最大化(是一种通过与环境…

自定义导航网站 源码深圳网站建设优化czzhwm

1、Android移植主要就是Linux内核移植,而Linux内核移植主要是Linux驱动移植,为了开发和测试Linux驱动,要在Ubuntu下搭建两套开发环境:Android应用程序开发环境和Linux内核开发环境; 2、Android源代码包括:内…

做本地的门户网站链家网站谁做的

nicinfo 在QNX操作系统中,nicinfo是一个用于显示网络接口卡(NIC)信息的命令行工具。它可以提供有关系统中所有可用网络接口卡的详细信息,例如接口名称、MAC地址、IP地址、掩码、广播地址、传输单元大小等等。 通过nicinfo命令可…

2010年4月江苏省03340网站建设与管理答案.ent做的网站有哪些

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 目录 669. 修剪二叉搜索树 108. 将有序数组转换为二叉搜索树 538. 把二叉搜索树转换为累加树 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界…

昆明猫咪科技网站建设做网站公司哪家强

HBase主要性能压力测试有两个,一个是 HBase 自带的 PE,另一个是 YCSB,先简单说一个两者的区别。PE 是 HBase 自带的工具,开箱即用,使用起来非常简单,但是 PE 只能按单个线程统计压测结果,不能汇…

如东网站建设网页游戏排行榜前十名2021

当在Windows系统中开发网络应用程序时,经常会遇到 "Address already in use: bind" 的错误。这个错误通常表示正在尝试绑定的端口已经被其他程序占用了。本篇技术博客将介绍如何在Windows系统中解决这个问题,并提供实用的解决方案。 在网络应用…

佛山专业做网站的360搜索引擎入口

STM32-GPIO 介绍 什么是GPIO? GPIO(通用输入/输出)是一种用于与外部设备进行数字通信的通用硬件接口。它允许微控制器或其他数字电路的引脚以灵活的方式配置为输入或输出,并在运行时进行动态控制。GPIO可用于连接和控制各种外围…

网站排名易下拉技巧电子商务营销渠道有哪些

2020FRM考试计算器:想一想FRM一级考试基本上按计算器停不下来,我们就一定要买一个简单易操作的计算器,但是GARP对于FRM考生所使用的计算器是有规定的:所有参加FRM考试的考生必须使用GARP指定的计算器,如果考生在考试期…

深圳西乡网站建设公司渝发建设官方网站

Matlab是一种功能强大的数值计算和数据分析软件,它在解决各种数学问题中都具有很高的效率和灵活性。其中,Matlab也可以用于求解标准规划问题,即线性规划问题。 标准规划问题是一种常见的优化问题,其目标是在给定的约束条件下&…

免费写作网站江苏建设网站酒店装修合同范本

http://blog.sina.com.cn/s/blog_6c9d65a1010180mg.html转载于:https://www.cnblogs.com/wangkongming/p/3516449.html

网站建设管理软件网站后台怎么做

1. JWT(JSON Web Token) 1.1 什么是JWT? JWT,全称为JSON Web Token,是一种用于在网络上安全传输信息的开放标准。它的设计初衷是用于跨域通信,在不同域之间传递声明性信息。JWT是一种自包含的令牌&#x…

网站建设书 模板下载深圳网页制作

遇到问题:用npm下载组件时出现Cannot find module ‘D:software\node_modules\npm\bin\npm-cli.js’ 问题,导致下载组件不能完成。 解决方法:下载缺少的npm文件即可解决放到指定node_modules目录下即可解决。 分析问题&#xff1…

泰州北京网站建设兰州免费网站建设

在网络安全领域,ATT&CK已经成为了研究和理解恶意攻击者行为的重要工具。站在攻击者的视角,ATT&CK为我们描绘了他们在攻击过程中所使用的各种战术、技术和常见知识。本文将结合ATT&CK框架,对水坑钓鱼攻击进行深入分析,…

app定制开发 价格哈尔滨网站优化

重定向AutoResponder的用法 关于Fiddler的AutoResponder重定向功能,主要是时进行会话的拦截,然后替换原始资源的功能。 它与手动修该reponse是一样的,只是更加方便了,可以创建相应的rules,适合批处理的重定向功能。 …

行业门户网站大全wordpress ftp上传

如何避免Java死锁? 是Java面试中最受欢迎的问题之一,也是本季多线程的风格,主要是在高层提出,并带有很多后续问题。 尽管问题看起来很基础,但是一旦您开始深入研究,大多数Java开发人员就会陷入困境。 面试…

做美食推广的网站wordpress添加主题提示缺少文件

电感器 文章目录 电感器1、概述2、电感器的时间常数3、电感器示例1 电感器是一种由线圈组成的无源电气元件,其设计目的是利用电流通过线圈而产生的磁力和电力之间的关系。 1、概述 在本中,我们将看到电感器是一种电子元件,用于将电感引入到电…