繁体   English   中英

GlobalScope.launch 是“微妙的” - 如何处理?

[英]GlobalScope.launch is "delicate" - how to deal with?

我正在更新我的 Kotlin Android 应用程序以使用 Coroutines 1.5.2(以前使用的 1.4.3)。

在 1.5.2 中,对GlobalScope.launch的任何使用现在都被标记为“精致”的检查:

https://blog.jetbrains.com/kotlin/2021/05/kotlin-coroutines-1-5-0-released/#globalscope

假设我知道我在做什么(在某些情况下,我需要一个 scope 不会 go 包含活动/片段)。

如何标记这些用途,以免它们被标记? 建议使用以下选项,但似乎没有一个是好的。

选项 1 - 将@DecliateCoroutinesApi添加到方法中。 这使得该方法也“微妙”并且现在对它的任何调用都会得到检查,因此什么也得不到。

选项 2 - 将@DecliateCoroutinesApi添加到 class。 好像有点矫枉过正。

选项 3 - 将@OptIn(DelicateCoroutinesApi::class)添加到方法中。 几乎不错,但需要一个特殊的编译器开关-Xopt-in=kotlin.RequiresOptIn 有点乱。

有什么建议么?

如果您真的知道自己在做什么,那么选项 3 应该是 go 的方式。 @OptIn确实是实验性的,但编译器标志通常是通过@OptIn使用实验性功能所付出的小代价。 您也不能使用编译器标志,并保留有关@OptIn注释本身的警告,但这甚至更混乱 IMO。

也就是说,你真的应该三思而后行使用GlobalScope 大多数情况下,您可以创建一个您自己控制的 scope(使用调度程序,也可能使用Job / SupervisorJob ,因此您可以在适当的时候取消协程)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM