![](/img/trans.png)
[英]How to get String as a return value from "GlobalScope.launch" block
[英]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.