如果我在 KMM 中使用 GlobalScope 作为应用程序级协程,这有什么关系吗?

发布于 2025-01-13 15:08:48 字数 935 浏览 0 评论 0原文

我在单活动 Android 应用程序中有一个 ViewModel Kotlin 类,它启动与应用程序级存储库通信的协程。

在 Android 中,我使用 ViewModel 范围和 Dispatchers.IO 来启动协程。

viewModelScope.launch(Dispatchers.IO, CoroutineStart.DEFAULT, someFunction)

在 iOS 中,我无法使用 viewModelScope,但我仍然在 iOS 项目的应用程序级别创建“ViewModel”。因此,我将 GlobalScopeDispatchers.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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文