可能捕获来自不同范围的异常?

Catch exceptions from different scope possible?

这种设置是否可行?

scopeA.launch {
    try {
        scopeB.launch {
            throw SomeException()
        }
    } catch (e: SomeException) {
        // Want to catch here
    }
}

你似乎想要矛盾的事情:启动并发协程暂停当前工作直到它完成,捕获可能的异常。你必须决定你真正想要什么:

  1. 如果要并发,那么在子协程内处理异常:

    scopeA.launch {
        launch(dispatcherB) {
            try {
                throw SomeException()
            } catch (e: SomeException) {
                // handle
            }
        }
    }
    
  2. 如果您不想要它,请不要 launch 协程,而是使用 withContext(dispatcherB)

    scopeA.launch {
        try {
            withContext(dispatcherB) {
                throw SomeException()
            }
        } catch (e: SomeException) {
            // handle
        }
    }
    
  3. 如果硬要让两个生命周期解耦的协程进行通信,那么也必须引入解耦的通信机制。例如,您可以设置一个 Channel<SomeException>Flow<SomeException>.