What is the difference between Dispatchers.Main and Dispatchers.Default in Kotlin coroutines?

我使用了viewModelScope.launch {},启动块按预期在UI线程上执行.然后我发现它默认为viewModelScope.launch(Dispatchers.Default) {}.

这让我有点困惑,因为我认为我应该使用Dispatchers.Main在UI线程上执行操作.

So far it looks like that on Android Dispatchers.Default is defaulting to Dispatchers.Main. Is that right?

如果我使用一个或另一个,或者它们可以互换,有什么缺点吗?如果它们在Android上可以互换,如果将来我会添加对kotlin multiplatform的支持,是否会对某些事情产生影响?

推荐答案

Then I discovered that it defaults to viewModelScope.launch(Dispatchers.Default) {}.

No, viewModelScope.launch() defaults to Dispatchers.Main. Google overrides the ordinary default launch() dispatcher, which is Dispatchers.Default. I recommend always specifying the dispatcher, rather than having to make people guess which one gets used in which circumstances.

Is that right?

不,对不起.

Kotlin相关问答推荐

Compose:LaunchedEffect在密钥更改后不会重新启动

最好的方法来创建一个 map 在kotlin从两个列表

何时使用figureEach

KTOR';S函数`staticResources`在Kotlin本机目标上不可用

在Kotlin中,我是否可以访问已知的WHEN子句值?

如何注入返回通用列表的转换器?

如何使用 Firebase 和 Kotlin 在文本 (Jetpack Compose) 中显示当前用户名?

如何在 micronaut 上启用 swagger UI?

interface扩展

Kotlin 中的部分类委托

如何将 kotlin 集合作为 varagrs 传递?

如何在主线程上使用 Kotlin 协程 await()

参数不匹配;SimpleXML

空对象引用上的 TransitionSet ArrayList.size()

Kotlin out-projected 类型禁止使用

使用 kotlin 每 3 位数添加逗号或点

尾随 lambda 语法(Kotlin)的目的是什么?

在多平台子元素中使用kapt

Android Compose 生产准备好了吗?

Kotlin:如何使用扩展函数扩展枚举类