3.2-CoroutineScope/CoroutineContext:GlobalScope

2024-08-25 12:04

本文主要是介绍3.2-CoroutineScope/CoroutineContext:GlobalScope,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

GlobalScope 是一个特殊的 CoroutineScope,它是一个单例的 CoroutineScope,我们可以直接用它启动协程:

GlobalScope.launch {}

我们在 IDE 用 GlobalScope 时会有一条黄线,提示的是要小心使用它因为容易用错、容易写出问题:

在这里插入图片描述

当然我们理解了它的作用和适用场景后,是可以放心的使用它的。

前面讲解过的 CoroutineScope 调用 launch 启动的协程基本都会有内置的 Job,无论是自定义创建的 CoroutineScope,还是协程提供给我们的 CoroutineScope:

val scope = CoroutineScope(EmptyCoroutineContext) // 内部会创建一个 Job
val job = scope.launch {coroutineContext[Job] // 这里一定会有 Job
}

我们简单看下 GlobalScope 的源码:

CoroutineScope.kt@DelicateCoroutinesApi
public object GlobalScope : CoroutineScope {// 重写了 coroutineContext,直接返回了 EmptyCoroutineContextoverride val coroutineContext: CoroutineContextget() = EmptyCoroutineContext
}GlobalScope.launch {// coroutineContext[Job] // 返回 null// coroutineContext.job // 没有 job 抛出异常
}

可以看到 GlobalScope 重写了 coroutineContext,直接返回了 EmptyCoroutineContext。所以说 GlobalScope 真正的特点是它没有内置的 Job,因为 coroutineContext 就是一个空的上下文,自然也没有 Job。

没有 Job 的 CoroutineScope 有什么作用呢?没有 Job 说明它创建的协程就没有父协程,确切的说它创建的协程的 Job 就没有父 Job。

GlobalScope 的使用场景:在不需要和生命周期绑定又想启动协程的地方使用,因为没有父 Job 也就不会因任何组件的关闭而自动取消协程。CoroutineScope(EmptyCoroutineContext).launch 这么写又比较麻烦,所以提供了GlobalScope。使用它时做好及时关闭协程即可,并不是不能使用的东西

这篇关于3.2-CoroutineScope/CoroutineContext:GlobalScope的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105499

相关文章

[3.2] 机器人连杆变换和运动学方程

本节首先推导相邻两连杆坐标系之间的变换矩阵,然后将这些变换矩阵依次相乘,得到操作臂的运动学方程。该方程表示末端连杆相对于基座的位姿关系,是各关节变量的函数。 连杆坐标系{i}与{i-1}通过四个参数、、、联系起来,因此坐标系{i}相对于{i-1} 的齐次变换矩阵T,通常也是连

《第一行代码》3.2View测量 笔记

1.View测量 如果我们要想绘制一个图形,首先我们要知道这个图形的大小;再是这个图形具体在什么位置;最后将图形绘制出来。 onMeasure() 如果我们想知道这个图形的大小,必须通过onMeasure()方法来发帮助我们测量View,MeasureSpec是以个32位的int值,其中高2位为测量模式,低30为测量的大小,在计算中使用位运算原因是为了提高并优化效率。

【计算机组成原理】3.2.2 只读存储器ROM

3.2.2 只读存储器ROM 00:00 各位同学大家好,在这个小节中我们要学习ROM芯片。上一小节中我们学习了两种具体的RAM芯片,分别是DRAM和SRAM。RAM芯片可以支持随机存取,读写速度会很快,但是它是一种易失性的存储芯片,也就是如果我们断电之后,RAM芯片里的数据就会消失。然而我们生活中很多数据在没有电的时候,我们也需要保证能够被保存。这一小节中我们会介绍几种类型的ROM芯片,分别

tthinkPHP 3.2.3版本图片验证码的问题解决方法

实例化Verify,生成验证码的方法 public function vcode(){         ob_clean();         $Verify = new \Think\Verify();           $Verify->fontSize = 14;           $Verify->length   = 4;           $Verify->useNoise

【计算机组成原理】3.2.0+3.2.3 主存储器的基本组成

3.2.0+3.2.3 主存储器的基本组成 00:00 各位同学大家好,在这个小节中我们会学习主存储器的基本组成。这个小节的内容本来是在王道书里的3.3那个小节,但是我们会把这部分的内容把它提到3.2之前来讲解。因为学习这个小节的内容,可以让大家能够对主存储器的基本原理能有一个宏观的认识,然后我们再回去学习3.2会更容易理解。 00:25 在这个视频中我们首先会学习使用半导体元器件来存储二

3.2K Star,一个极简主义个人网站

Hi,骚年,我是大 G,公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注。 今天推荐一个极简主义的个人网站,纸的纯净、雪的清新。 特点 🚀 SEO 100%,性能优秀:在 LightHouse 中表现优秀,性能 > 90%,最佳实践 > 90%。🎨UI 现代化,简洁而不简单:用户界面设计现代化,简洁而不简

redis-3.2.4集群搭建

由于需要使用集群,我们现在一台服务器利用多个端口进行测试一下,下面是搭建redis集群的过程: 此步骤是在之前安装redis单机之后,接着来执行。 1、创建6个redis实例:指定端口号为7001-7006          1)第一步:在/usr/local路径下创建redis-cluster文件夹                  mkdir redis-cluster

自修C++Primer----3.2标准库类型string

目录 1.String的相关操作 1.1拷贝初始化&&直接初始化 1.2显示创建临时对象 1.3读取string对象内容 1.4一次读取多个未知对象 1.5使用getline读取一整行内容 1.6size()的返回值size_type类型 1.7两个string对象比较 1.8string对象赋值 1.9两个string对象相加 1.String的相关操作

3.1-CoroutineScope/CoroutineContext:CoroutineScope 和 CoroutineContext 的概念

文章目录 CoroutineContext 的概念CoroutineScope 的概念 在使用协程的时候我们会经常跟 CoroutineScope 和 CoroutineContext 打交道,但是对它们的之间有什么区别、概念是什么还是很模糊。在这里就把它们先讲清楚。 CoroutineContext 的概念 CoroutineContext 的概念其实顾名思义就是 协程的上下

Windows下安装MongoDB 3.2

MongoDB 在安装MongoDB 3.2.0版本时,翻看官网安装说明,参照成功安装。为方便日后安装参考,记录此文。文章自己简单翻译,有出入望指教。 MongoDB 安装 确定MongoDB版本 官网提供了三个版本下载: - MongoDB for Windows 64-bit 适合 64 位的 Windows Server 2008 R2, Windows 7 , 及最新版本的