- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
阅读了很多关于此的内容,但仍有一些不清楚的地方。
这句话:“协程使以同步方式编写异步代码”有点令人困惑。
协程总是异步的。他们基本上一直在线程上运行?由我们决定哪些线程将使用我们声明使用的协程(Mainscope - 它们在 MainThread 上运行,CoroutinesScope - 它将在一些与 UI 线程无关的不同线程上运行?? ViewmodelScope - 它们将在以下线程上运行与 View 模型相关联??)
我做对了吗?
最佳答案
大多数java世界编写异步的传统方式是使用“回调”,他们认为这是通过添加成功和失败的监听器来编写异步任务的唯一方法。
但协程方式略有不同。实际上,您调用了像 delay(ms: Long)
这样的挂起函数它似乎不是异步的,因为这里没有涉及任何回调,但在幕后 Continuation object 将代替回调工作,以便稍后在需要时恢复它。
Coroutines are ALWAYS asynchronus
They are basically running on the threads all the time?
It is on us to decide which threads will coroutines we declare use
Mainscope - they run on MainThread
public fun MainScope(): CoroutineScope = ContextScope(SupervisorJob() + Dispatchers.Main)
它创建一个
CoroutineScope上下文的调度程序元素为
Dispatchers.Main使子进程默认调度到主线程(未指定时),并附加一个
SupervisorJob使其他 child 不受取消之一的影响。
CoroutinesScope - it will run on some different threads that are not associated with UI thread??
Executors.newFixedThreadPool(4).asCoroutineDispatcher() // Your own dispatcher max of 4-threads
CoroutineContext 中除了 Dispatcher 之外还有很多其他的元素。比如:Job、CoroutineName、CoroutineInterceptor、CoroutineExceptionHandler 等
我建议阅读 this文章可以更好地可视化 CoroutineContext 的一些最重要的元素正在发生的事情。
launch
启动协程。或
async
,您可以通过将 CoroutineContext 作为参数传递来创建一个,例如:
CoroutineScope(Dispatchers.Default + Job() + CoroutineName("My Coroutine"))
.
+
符号是 plus 的过载在 CoroutineContext 中定义的函数本质上是用右侧 CoroutineContext 中的元素覆盖左侧 CoroutineContext 中的元素(如果左侧不存在元素,它只会添加它)。
ViewmodelScope - they will run on the threads that are associated with viewmodel??
viewModelScope.launch(Dispatchers.Default) {
// This coroutine is launched under Dispatchers.Default (backed by a CommonPool of threads) instead of Dispatchers.Main
// but will follow cancellation as soon as lifecycle of Activity associated is destroyed as Job element is not overriden
}
关于android - 协程解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62614216/
在我的设置中,我试图有一个界面 Table继承自 Map (因为它主要用作 map 的包装器)。两个类继承自 Table - 本地和全局。全局的将有一个可变的映射,而本地的将有一个只有本地条目的映射。
Rust Nomicon 有 an entire section on variance除了关于 Box 的这一小节,我或多或少地理解了这一点和 Vec在 T 上(共同)变体. Box and Vec
我是一名优秀的程序员,十分优秀!