美文网首页
协程四(CoroutineScope)

协程四(CoroutineScope)

作者: coke613 | 来源:发表于2023-07-06 10:02 被阅读0次
    定义协程必须指定其CoroutineScope,它会跟踪所有协程,同样它还可以跟踪取消它所启动的协程.

    协程作用域:

    • GlobalScope. 生命周期是process 级别的,即时Activity 或 fragment已经销毁,协程仍然在执行.

    • MainScope. 在Activity 中使用,可以在onDestroy()中取消.

    • viewModelScope. 只能在ViewModel 中使用,绑定ViewModel 的生命周期.

    • lifecycleScope. 只能在Activity,fragment 中使用,会绑定Activity 和 Fragment生命周期.

    coroutineScope 与runBlocking 协程作用域
    • runBlocking是常规函数,而coroutineScope 是挂起函数.
    • 它们都会等待其协程以及所有子协程结束, 主要区别在于runBlocking 方法会阻塞当前线程来等待,而coroutineScope只是挂起,会释放底层线程用于其他用途.
    coroutineScope 与 supervisorScope 协程作用域
    • coroutineScope: 一个协程失败了,所有其他兄弟协程也会被取消
    • supervisorScope: 一个协程失败了,不会影响其他兄弟协程
            runBlocking {
                coroutineScope {
                   val job1 =  launch {
                       delay(400)
                       println("job1 fininsh")
                   }
    
    
                    val job2 = launch {
                        delay(200)
                        println("job2 fininsh")    // ① 程序打印   job2 fininsh
                       throw IllegalArgumentException()    // ② 程序崩溃 协程体取消
                    }
                }
            }
    
            runBlocking {
                coroutineScope {
                   val job1 =  launch {
                       delay(400)
                       println("job1 fininsh")   // ② 程序打印   job1 fininsh
                   }
    
    
                    val job2 = async {
                        delay(200)
                        println("job2 fininsh")   //  ① 程序打印   job2 fininsh
                        "HHH"
                       throw IllegalArgumentException()
                    }
                }
            }
    
    

    相关文章

      网友评论

          本文标题:协程四(CoroutineScope)

          本文链接:https://www.haomeiwen.com/subject/biekudtx.html