小编Col*_*ard的帖子

在协程范围内抛出异常时,协程范围是否可重用?

我一直在解决使用协同程序进行错误处理的问题,我已通过以下步骤缩小到此单元测试:

  1. 我与任何调度员一起创建一个协程范围.
  2. 我在异步块中(甚至在嵌套的异步块中)在此范围内的任何位置抛出异常.
  3. 我在返回的延迟值上调用await并处理异常.
  4. 这一切都很好.但是,当我尝试使用相同的协同程序范围来启动新的协程时,这总是异常地完成同样的异常.

    这是测试:

    fun `when you throw an exception in a coroutine scope, is the coroutine scope dead?`() {
        val parentJob = Job()
        val coroutineScope = CoroutineScope(parentJob + Dispatchers.Default)
    
        val deferredResult = coroutineScope.async { throw IllegalStateException() }
    
        runBlocking {
            try {
                deferredResult.await()
            } catch (e: IllegalStateException) {
                println("We caught the exception. Good.")
            }
    
            try {
                coroutineScope.async { println("we can still use the scope") }.await()
            } catch (e: IllegalStateException) {
                println("Why is this same exception still being thrown?") …
    Run Code Online (Sandbox Code Playgroud)

error-handling kotlin kotlin-coroutines

1
推荐指数
1
解决办法
184
查看次数

标签 统计

error-handling ×1

kotlin ×1

kotlin-coroutines ×1