美文网首页
Androdi kotlin Coroutines(协程)详解

Androdi kotlin Coroutines(协程)详解

作者: 水天滑稽天照八野滑稽石 | 来源:发表于2020-09-16 00:15 被阅读0次

Androdi kotlin Coroutines(协程)详解 (一)
Androdi kotlin Coroutines(协程)详解 (二)
Androdi kotlin Coroutines(协程)详解 (三)
Androdi kotlin Coroutines(协程)详解 (四)
Androdi kotlin Coroutines(协程)详解 (五)
Androdi kotlin Coroutines(协程)详解 (六)

三、协程的取消与超时

3.1 协程取消

作业可以被安排到父-子层次结构中,在这种层次结构中,取消一个父节点将导致立即递归地取消其所有子节点。如果一个子节点出现 CancellationException 以外的异常而失败,则会立即取消它的父节点,并因此取消它的所有其他子节点。一般调用 job.cancel() 方法取消协程。这里也有一个可以使 Job 挂起的函数 cancelAndJoin 它合并了对 cancel 以及 join 的调用。

        GlobalScope.launch {
            val job = launch {
                repeat(1000) { i ->
                    Log.d(TAG, "job: I'm sleeping $i ...")
                    delay(500L)
                }
            }
            delay(1300L) // 延迟一段时间
            Log.d(TAG, "main: I'm tired of waiting!")
            job.cancel() // 取消该作业
            job.join() // 等待作业执行结束
            Log.d(TAG, "main: Now I can quit.")
        }

如果在父节点取消


        val job = GlobalScope.launch {
            val job = launch {
                repeat(1000) { i ->
                    Log.d(TAG, "job: I'm sleeping $i ...")
                    delay(500L)
                }
            }
            Log.d(TAG, "main: I'm tired of waiting!")
            job.join() // 等待作业执行结束
        }
        Thread.sleep(1300)
        Log.d(TAG, "main: I'm cancel!")
        job.cancel()
    }

3.2 协程超时

withTimeout 函数,注意要trycatch,会抛出一个TimeoutCancellationException异常

        GlobalScope.launch {
            try {
                withTimeout(1300) {
                    repeat(1000) { i ->
                        Log.d(TAG, "I'm sleeping $i ...")
                        delay(500L)
                    }
                }
            } catch (e: TimeoutCancellationException) {
                e.printStackTrace()
                Log.d(TAG, "Exception ${e.message} ")
            }
        }

相关文章

网友评论

      本文标题:Androdi kotlin Coroutines(协程)详解

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