gpt4 book ai didi

android - 使用 GlobalScope.launch 和 CoroutineScope().launch 启动协程有区别吗?

转载 作者:行者123 更新时间:2023-12-04 23:58:45 27 4
gpt4 key购买 nike

在 Kotlin 中有多种启动协程的方法。我发现了几个示例,其中 GlobalScope CoroutineScope 被使用。但是后者是在启动协程时直接创建的:

  • 使用 GlobalScope :
    fun loadConfiguration() {
    GlobalScope.launch(Dispatchers.Main) {
    val config = fetchConfigFromServer() // network request
    updateConfiguration(config)
    }
    }
  • 使用 CoroutineScope实例,在启动协程时直接创建:
    fun loadConfiguration() {
    CoroutineScope(Dispatchers.Main).launch {
    val config = fetchConfigFromServer() // network request
    updateConfiguration(config)
    }
    }

  • 在这种情况下,这两种方法有区别吗?
    第二种情况不违反 principle of structured concurrency ?

    最佳答案

    Doesn't the second case violate the principle of structured concurrency?


    实际上这两种情况同样违反了它,因为它们具有几乎完全相同的语义。所有反对使用 GlobalScope.launch 的警告您可能遇到的,请向 CoroutineScope().launch 申请一样。一个细微的区别是后者完全没有意义,而前者至少有一些合法的用例。
    写作 CoroutineScope().launch而不是 GlobalScope.launch掩盖 Intent 和后果,并且每次都创建一个不必要的对象。
    我认为 CoroutineScope().launch成语的出现仅仅是因为它规避了您对 GlobalScope.launch 的警告。 .

    关于android - 使用 GlobalScope.launch 和 CoroutineScope().launch 启动协程有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70593078/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com