如果我在 KMM 中使用 GlobalScope 作为应用程序级协程,这有什么关系吗?
我在单活动 Android 应用程序中有一个 ViewModel Kotlin 类,它启动与应用程序级存储库通信的协程。
在 Android 中,我使用 ViewModel
范围和 Dispatchers.IO
来启动协程。
viewModelScope.launch(Dispatchers.IO, CoroutineStart.DEFAULT, someFunction)
在 iOS 中,我无法使用 viewModelScope,但我仍然在 iOS 项目的应用程序级别创建“ViewModel”。因此,我将 GlobalScope
与 Dispatchers.Default
一起使用(因为 Dispatchers.IO
在 iOS 项目中不存在)。
GlobalScope.launch(Dispatchers.Default) {
someFunction()
}
据我所知,GlobalScope
现在被标记为微妙,并且它不符合 Kotlin 的结构化并发性。所以我使用了
MainScope().launch(Dispatchers.Default) {
someFunction()
}
但我想知道,对于我的情况,由于我的协程是应用程序级别的,所以如果我使用 GlobalScope 实际上并不重要?我看不到任何缺点,但也许有一些。任何意见将不胜感激。
(我正在使用 KMM 的实验内存模型,以防万一这很重要)
I have an ViewModel
Kotlin class in a single-Activity Android app that starts coroutines that talk to an application-level repository.
In Android I use the ViewModel
scope with Dispatchers.IO
to start the coroutines.
viewModelScope.launch(Dispatchers.IO, CoroutineStart.DEFAULT, someFunction)
In iOS I can't use viewModelScope
, but I still create my "ViewModel"s at the application-level in my iOS project. So I use GlobalScope
with Dispatchers.Default
(being as Dispatchers.IO
doesn't exist in iOS projects).
GlobalScope.launch(Dispatchers.Default) {
someFunction()
}
I understand that GlobalScope
is now marked as delicate, and it doesn't conform to Kotlin's structured concurrency. So instead I used
MainScope().launch(Dispatchers.Default) {
someFunction()
}
But I'm wonder if, for my case, since my coroutines are application-level, it doesn't actually matter if I use GlobalScope
? I can't see any downsides, but maybe there are some. Any input would be appreciated.
(I'm using the experimental memory model for KMM, in case this matters)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论