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

Kotlin Coroutines:使用NonCancellable和独立的新工作有什么不同

Kotlin Coroutines是一种用于异步编程的框架,它可以简化并发编程的复杂性。在使用Kotlin Coroutines时,可以使用NonCancellable和独立的新工作来实现不同的效果。

  1. NonCancellable(不可取消的):NonCancellable是一个上下文元素,用于指定一个协程不可被取消。当使用NonCancellable时,即使外部协程被取消,被标记为NonCancellable的协程仍然会继续执行。这对于一些关键任务或需要确保执行完成的操作非常有用。
  2. 独立的新工作:独立的新工作是指在协程中启动一个新的协程,该新协程与父协程无关,它们可以并行执行而不会相互影响。独立的新工作可以通过使用launch函数来实现。与NonCancellable不同,独立的新工作不受父协程的取消影响,它们会继续执行直到完成。

使用NonCancellable和独立的新工作的不同之处在于它们的取消行为和执行方式:

  • NonCancellable用于确保某些关键任务的执行不会被取消,即使外部协程被取消。这对于需要保证执行完成的操作非常有用,例如数据库事务的提交或网络请求的发送。通过使用withContext(NonCancellable)函数将代码块包装起来,可以将其标记为不可取消的。
  • 独立的新工作用于在协程中启动一个与父协程无关的新协程,它们可以并行执行而不会相互影响。独立的新工作可以通过使用launch函数来实现。与NonCancellable不同,独立的新工作不受父协程的取消影响,它们会继续执行直到完成。这对于需要并行执行的任务非常有用,例如同时进行多个网络请求或并行处理大量数据。

总结:

  • NonCancellable用于确保关键任务的执行不会被取消,适用于需要保证执行完成的操作。
  • 独立的新工作用于在协程中启动一个与父协程无关的新协程,适用于需要并行执行的任务。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数计算(云原生Serverless计算服务):https://cloud.tencent.com/product/scf
  • 腾讯云数据库(云原生数据库服务):https://cloud.tencent.com/product/cdb
  • 腾讯云容器服务(云原生容器化部署与管理服务):https://cloud.tencent.com/product/tke
  • 腾讯云CDN(内容分发网络服务):https://cloud.tencent.com/product/cdn
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

《Kotin 极简教程》第9章 轻量级线程:协程(2)《Kotlin极简教程》正式上架:

它是一个完全无锁的实现。 9.10.2 关闭通道和迭代遍历元素 与队列不同, 通道可以关闭, 以指示没有更多的元素。在接收端, 可以使用 for 循环从通道接收元素。...协程通常是由编译器来实现的机制。线程看起来也在语言层次,但是内在原理却是操作系统先有这个东西,然后通过一定的API暴露给用户使用,两者在这里有不同。 协程就是用户空间下的线程。...另外,使用协程,我们不再需要像异步编程时写那么一堆callback函数,代码结构不再支离破碎,整个代码逻辑上看上去和同步代码没什么区别,简单,易理解,优雅。...关于协程工作原理的更多细节可以在这个设计文档中找到:https://github.com/Kotlin/kotlin-coroutines/blob/master/kotlin-coroutines-informal.md...9.15.2 标准 API 协程有三个主要组成部分: 语言支持(即如上所述的挂起功能), Kotlin 标准库中的底层核心 API, 可以直接在用户代码中使用的高级 API。

1.2K20
  • 《Kotin 极简教程》第9章 轻量级线程:协程(1)

    其中比较典型的有Scheme、Lua、Python、Perl、Go等以first-class的方式提供对协程的支持。 同样地,Kotlin也支持协程。...,启动一个新的协程后台任务,并返回一个Job类型的对象作为当前协程的引用。...Thread.sleep(5000L) } 9.2 桥接 阻塞和非阻塞 上面的例子中,我们给出的是使用非阻塞的delay函数,同时有使用了阻塞的Thread.sleep函数,这样代码写在一起可读性不是那么地好...让我们来使用纯的Kotlin的协程代码来实现上面的 阻塞+非阻塞 的例子(不用Thread)。...} 9.6.4 协程执行不可取消的代码块 如果我们想要上面的例子中的finally{...}完整执行,不被取消函数操作所影响,我们可以使用 run 函数和 NonCancellable 上下文将相应的代码包装在

    1.2K10

    tcp和udp的区别和使用场景_TCP跟UDP有什么不同

    大家好,又见面了,我是你们的朋友全栈君。 TCP和UDP都是传输层协议 TCP TCP 是一种面向有连接的传输层协议,能够对自己提供的连接实施控制。适用于要求可靠传输的应用,例如文件传输。...在实际网络中,基于TCP连接的两端,可以同时进行TCP报文段的发送和接收(即全双工通信) TCP可靠传输,UDP不可靠传输 UDP 网络层向传输层提供的是无连接的不可靠的传输服务,当传输层使用UDP...,其他什么也不做。...,也就是不可靠,不使用流量控制和拥塞控制 可靠传输,使用流量控制和拥塞控制 首部对比 仅8字节 最小20字节,最大60字节 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    83320

    再谈协程之CoroutineContext我能玩一年

    Kotlin Coroutines的核心是CoroutineContext接口。...为了理解为什么必须重新定义一个新的接口,而不是简单地使用一个标准的Map,我们可以参考下面这样一个类似的等效申明。...❝Coroutine上下文的一个元素本身就是一个只包含自身的上下文。 ❞ 有了这个「+」运算符,就可以被用来轻松地将元素以及元素与元素之间结合成一个新的上下文。...首先,plus之后,不出意外的话,会返回CombinedContext,只其中会包含plus两边的对象,这里有两种可能,一种是A + B的时候,B中有和A相同的Key,那么A中的对应Key会被删掉,使用...在以前的coroutines版本中,async中的代码将在Dispatchers.Default提供的工作线程上运行,但现在它将在UI线程上运行,这可能导致应用程序阻塞甚至崩溃。

    77610

    Kotlin协程开篇

    《Kotlin协程》均基于Kotlinx-coroutines 1.3.70 新开个坑,专门讲kotlin的协程。聊协程之前先说一下具体聊的是协程的什么内容。 · 协程是什么? · 什么时候用协程?...· 协程的核心是什么? · kotlin的协程和其他语言的协程有什么异同? kotlin的协程的出现其实比kotlin语言还晚一点。在当前这个版本,协程甚至都还处于一个不稳定的迭代版本中。...协程到目前为止都还没进入kotlin的标准库,它是一个独立的依赖库,叫 Kotlinx。对于想在开发中使用协程的人来说,需要在依赖里加入kotlinx-core依赖。...在Kotlin里使用协程非常方便, import kotlinx.coroutines.* fun main() { GlobalScope.launch { // 在后台启动一个新的协程并继续...kotlin的协程还在发展 如果去看kotlin的协程源码的话会发现里面有很多 exeprimental 的api和实现逻辑。

    90420

    如何优雅的取消协程 ?

    ⚠️ 协程作用域一旦被取消,就不能在其中创建新协程了。 如果你在使用 androidx KTX 类库的话,大多数情况下你不需要创建自己的作用域,因此你也不需要负责取消它们。...例如,当 ViewModel 进入 cleared 状态时,会自动取消其中启动的所有协程。 为什么协程中的工作没有停止? 当我们调用 cancel 时,并不意味着协程中的工作会立即停止。...} 让我们逐步来看发生了什么。当调用 launch 时,创建了一个新的协程,并处于 active 状态。...yield 应该在定时检查中最先被调用,就像前面提到的 ensureActive 一样。 Job.join() 和 Deferred.await() 的取消 获取协程的返回值有两种方法。...处理协程取消带来的副作用 现在假设我们需要在协程取消时做一些特定的任务:关闭正在使用的资源,打印取消日志,或者其他一些你想执行的清理类代码,有以下几种方法可以实现。 检查 !

    1.5K30

    6个Android Kotlin协程相关面试题

    面试题目1:解释Kotlin协程中的launch和async构建器的区别和用途。...解答: launch和async都是用于启动新协程的构建器,但它们有以下不同点: launch:返回一个Job对象,用于表示协程的执行,不直接返回结果。...协程中的结构化并发是什么,以及如何使用它来管理多个协程。...作为Android资深开发专家和面试官,以下是一些关于Kotlin协程的深度面试题及其详细解答: 面试题目6:Kotlin协程与线程有什么区别?如何在Android中使用协程进行异步编程?...解答: 协程和线程都是用于并发编程的工具,但它们有显著的区别: 协程: 轻量级:协程是轻量级的,它们在同一个线程中运行,可以在不阻塞线程的情况下挂起和恢复。

    25310

    kotlin--协程的启动和取消

    一、协程的启动 1.launch与async构建器都用来启动新协程 launch:我们之前已经使用过了GlobalScope的launch来启动协程,它返回一个Job async:返回一个Deferred...,它也是一个Job,但是可以使用await函数获得运行的结果 除了之前结构化并发中介绍的几种指定CoroutineScope的API外,我们还可以使用runBlocking函数来指定CoroutineScope...,他会使用主线程来转换成协程 launch和async内如果有子协程,那么该协程会等待子协程执行结束 fun `test coroutine build`() = runBlocking {...1.runBlocking与coroutineScope runBlocking是常规函数,它会阻塞主线程,而coroutineScope是挂起函数,它们都会等待其协程体和子协助执行结束,作用域构建器使用的是父协程的上下文...二、协程取消 1.协程的取消 1.取消作用域会取消它的子协程,CoroutineScope是创建一个全新的协程上下文,和coroutineScope作用域是不同的,作用域构建器使用的是父协程的上下文 fun

    1K30

    今天Kotlin 1.3正式发布:支持协程和多平台组件Kotlin 开发者社区

    ,此外,Kotlin 的跨平台功能将为 Android 和 iOS 应用程序等组件之间共享业务逻辑,服务器也可以与 Web 和移动客户端共享逻辑,而且多平台库让日常的开发变得便捷。...Kotlin 的生态现状 今年以来,Kotlin 的使用率有了很大的增长,自今年 1 月份以来,约有 150 万开发者使用了 Kolin 编程,是去年同期的两倍,来自 Stack Overflow 的一项问卷调查显示...详解 Kotlin 1.3 新功能 Coroutines 已经稳定 Coroutines 是 Kotlin 1.1 引入新的异步 API,它是一个强大的工具,之前该特性一直处于试验阶段,而在最新的 v1.3...中,Coroutines 语法和标准库 API 都已稳定,你可以开始使用它了。...详情请阅读:https://kotl.in/coroutines Kotlin / Native Beta Kotlin / Native 使用 LLVM 将 Kotlin 源代码编译为独立的二进制文件

    1.4K20

    【译】LiveData with Coroutines and Flow

    为此,我们建议采用分层架构,这样我们就可以编写独立于UI的代码,而不用过多考虑生命周期。例如,我们可以添加一个持有业务逻辑的领域层(你的应用程序实际做什么)和一个数据层。...通常与ViewModels的工作方式有关。 这是一个在Android社区相当成熟的惯例,但你会发现有一些文章有不同意见。...这就是为什么我们在《应用程序架构指南》中推荐这种方法。 Scopes 由于Activities和Fragments比ViewModels有相等或更短的寿命,我们可以开始讨论操作的范围了。...一个非常方便的解决方案是Kotlin Coroutines。 我们喜欢在Android中使用Coroutines有很多原因。其中一些是。 很容易脱离主线程。...如果你想了解coroutines的介绍,可以看看Android的介绍和Kotlin的官方文档。

    1.4K10

    关于 Kotlin Coroutines, 你可能会犯的 7 个错误

    在我看来,Kotlin Coroutines(协程) 大大简化了同步和异步代码。...但是,我发现了许多开发者在使用协程时会犯一些通用性的错误。 1. 在使用协程时实例化一个新的 Job 实例 有时候你会需要一个 job 来对协程进行一些操作,例如,稍后取消。...另外由于协程构建器 launch{} 和 async{} 都需要 job 作为入参,你可能会想到创建一个新的 job 实例作为参数来使用。...所以你创建的新协程的父 job 并不是协程作用域的 job,而是新创建的 job 对象。 因此,协程的 job 和协程作用域的 job 此时并没有什么关联。...尝试使用 try/catch 来处理协程的异常 协程的异常处理很复杂,我花了相当多的时间才完全理解,并通过 博客[8] 和 讲座[9] 向其他开发者进行了解释。

    99820

    干货 | 携程机票 App KMM 跨端生产实践

    JetBrains 提出了不同于 RN 与 Flutter 的跨端解决方案,即使用不同的编译器编译同一份代码生成各端的不同产物来达到跨平台的目的,这就是 Kotlin Multiplatform。...上面关于 MMKV 的封装是一种常规且较为简单的封装,在我们的实际工作内容中,对网络框架的封装与改造值得一提。 携程自研的网络框架并非标准的 HTTP 协议,底层有大量定制的协议等内容。...更让人头疼的是,数据在 Store 内流转时每经过一个组件就会变一个名字,这丛概念上讲确实没有什么问题,因为数据在不同的组件间流转时从概念上来说会有区别,但在 MVIKotlin 的设计中每种概念都由一个...;在 kotlinx 库方面,除了上述 kotlinx.coroutines 与 kotlinx.serialization,官方之前又新启动了 kotlinx.datetime 项目,用于在全平台的...在 Kotlin 的生态环境发展中当然不止有 JetBrains 官方的功劳。

    3.7K10

    《Kotlin极简教程》第一章 Kotlin简介100% interoperable with Java™

    这是kotlin官网首页重点强调的: 100% interoperable with Java™ 这意味着什么呢?或者换个问法:我什么时候可以开始在我的项目中引入kotlin呢?...从最初的Jython和JRuby,到Scala,Clojure都是在JVM上实现的语言。为什么它们选择JVM? 跨平台 你的语言编译器后端只需要输出 JVM 字节码就可以。...JVM 作为一个成熟的高层运行环境,为 Guest 语言提供了很多运行时所需要的服务,比如内存管理(有业界领先的垃圾回收等),很大程度上避免了额外的独立开发。...社区庞大且成熟 JVM 有多个独立实现,也有若干厂商会持续推进,资料完备,社区巨大。...新的程序设计语言中的代码片段应该具备一个典型程序员所希望的适度复杂性。程序员会去期望在每天的工作中使用的语言。 中级程序员认可。所谓中级程序员是指那些普遍对博客、微博或者新语言不感兴趣的人。

    77620

    【翻译】深入 Kotlin 协程

    我将会指导你使用协程相关的基本示例,并观察背后到底发生了什么。 为什么像协程这种解决方案非常有必要? 在现代应用程序开发中,处理多线程任务是不可避免的工作。...,这个代码仍然离我们的刚开始的写法相差甚远 —— 对于使用者来说还是有那么一点复杂度的。...那么让我们来看看具体怎样使用命令式的风格写出类似的异步代码吧! 如何使用协程? 协程基于一种新的函数类型,叫做挂起函数。我们可以在函数名称前使用一种新的语言关键字 suspend 来标记。...work } var result = await doWork() 他们的实现方式在关于异步代码应该写成什么样的看法上拥有一致的基本理念,但是有几个主要的区别。...Coroutines Github.com Kotlin coroutines Kotlin 翻译

    1.5K10
    领券