Kotlinのcoroutineで例外を処理する方法
Kotlinにおけるコルーチンの例外処理手法は次のとおりです。
- try/catchブロックの使用: コルーチン内でtry/catchブロックを使用して例外をキャッチし、例外を処理します。たとえば、
GlobalScope.launch {
try {
// 协程代码块
} catch (e: Exception) {
// 异常处理逻辑
}
}
- CoroutineExceptionHandlerの使用:CoroutineExceptionHandlerの使用は、コルーチン内部で発生する例外の統一的な処理を可能にします。例えば:
val exceptionHandler = CoroutineExceptionHandler { _, exception ->
// 异常处理逻辑
}
GlobalScope.launch(exceptionHandler) {
// 协程代码块
}
- supervisorScopeを使う:supervisorScopeを使って作成した子スコープ内での例外が親スコープに伝播しないようにします。これにより、あるコルーチンで例外が発生してもスコープ全体がキャンセルされることを避けられます。例えば:
supervisorScope {
launch {
// 协程代码块
}
}
- asyncとawaitの使用: 例外処理を行うasync function内でコルーチンを作成し、awaitの箇所で例外を捕捉します。例:
val deferred = async {
// 协程代码块
}
try {
deferred.await()
} catch (e: Exception) {
// 异常处理逻辑
}
これらの手法は、具体のニーズに応じて選択して利用することで、コルーチン内部の例外処理を実現できます。