gpt4 book ai didi

multithreading - Coroutine Scope、Suspend 和 withContext 查询

转载 作者:行者123 更新时间:2023-12-02 12:21:48 24 4
gpt4 key购买 nike

我在下面有 3 个片段

  • 只是范围发射
  •     fun main() = CoroutineScope(Dispatchers.IO).launch { runMe() }
    fun rumMe() = doSomething()
  • 范围启动并暂停
  •     fun main() = CoroutineScope(Dispatchers.IO).launch { runMe() }
    suspend fun rumMe() = doSomething()
  • 使用 suspend 和 withContext 启动范围
  •     fun main() = CoroutineScope(Dispatchers.IO).launch { runMe() }
    suspend fun rumMe() = withContext(Dispatchers.Default) { doSomething() }

    我看到它们在与 Main 不同的线程中启动,并且异步运行而不阻塞主线程。

    我想知道他们有什么不同?如果它们都相同,那么 1 是最好的。如果没有,我什么时候应该使用 2 或 3?

    我试着读这个,但看不清楚 https://medium.com/@elizarov/blocking-threads-suspending-coroutines-d33e11bf4761

    最佳答案

    1和2是一样的。您必须添加 suspend仅当它对协程执行某些操作时才对您的函数进行修饰。

    第一种和第三种情况的区别:

    fun main() = CoroutineScope(Dispatchers.IO).launch { 
    // io thead executor
    runMe()
    }
    // still io thread executor
    fun rumMe() = doSomething()

    fun main() = CoroutineScope(Dispatchers.IO).launch {
    // io thead executor
    runMe()
    }
    suspend fun rumMe() = withContext(Dispatchers.Default) {
    // default/cpu thead executor
    doSomething()
    }

    关于multithreading - Coroutine Scope、Suspend 和 withContext 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57507224/

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