kotlin 协程。作用域的取消,兄弟协程的取消,协程取消会异常

Posted 安果移不动

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kotlin 协程。作用域的取消,兄弟协程的取消,协程取消会异常相关的知识,希望对你有一定的参考价值。

 作用域的取消

   private fun testScopeCancel() = runBlocking<Unit> 
        val scope = CoroutineScope(Dispatchers.Default)
        scope.launch 
            delay(1000)
            Log.e(TAG, "job1 finish")
        
        scope.launch 
            delay(1000)
            Log.e(TAG, "job2 finish")
        
        delay(100)
        scope.cancel()
    

整个协程都会被取消,

 

如果我们想仅仅取消部分协程呢?

    private fun testBrotherScopeCancel() = runBlocking<Unit> 
        val scope = CoroutineScope(Dispatchers.Default)
        val job1 = scope.launch 
            delay(1000)
            Log.e(TAG, "job1 finish")
        
        val job2 = scope.launch 
            delay(1000)
            Log.e(TAG, "job2 finish")
        
        delay(100)

        job1.cancel()
        Log.e(TAG, "协程的作用域要被取消啦")
    

 

job是可以取消的,同理作用域也可以进行取消操作。

    private fun cancelilationExcepiton() = runBlocking 
        val job1 = GlobalScope.launch 
            try 
                delay(1100)
                Log.e(TAG, "job1 finish")
             catch (e: Exception) 
                e.printStackTrace()
            
        
        delay(100)
        job1.cancel(CancellationException("取消"))
        job1.join()
    

 

以上是关于kotlin 协程。作用域的取消,兄弟协程的取消,协程取消会异常的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 协程协程取消 ① ( 协程作用域取消 | 协程作用域子协程取消 | 通过抛出异常取消协程 | Job#cancel 函数 | 自定义异常取消协程 )

我想在使用 kotlin 协程的 android 超时后取消一个函数,但它不起作用

深入kotlin - 协程的取消

深入kotlin - 协程的取消

深入kotlin - 协程的取消

Kotlin协程的前世今生