东莞整合网站建设推广,建设通app下载,网络营销是做什么工作,网站开发工具的功能包括哪些前言
简单介绍supervisorScope函数#xff0c;它用于创建一个使用了 SupervisorJob 的 coroutineScope#xff0c; 该作用域的特点#xff1a;抛出的异常#xff0c;不会 连锁取消 同级协程和父协程。
看过很多 supervisorScope {} 文档的使用#xff0c;我照抄一摸一样…前言
简单介绍supervisorScope函数它用于创建一个使用了 SupervisorJob 的 coroutineScope 该作用域的特点抛出的异常不会 连锁取消 同级协程和父协程。
看过很多 supervisorScope {} 文档的使用我照抄一摸一样的代码运行就崩溃最后找到了解决方法应该是kotlin版本更新做过改动当前我使用的是 androidx.core:core-ktx:1.9.0 解决方法
需要将CoroutineExceptionHandler作为参数才有效果不然会崩溃。 private fun test() {// 原来的写法现在会崩溃
// runBlocking {
// Log.d(TAG, Start)
// launch {
// delay(100)
// Log.d(TAG, Task from runBlocking)
// }
// supervisorScope {
// val firstChild launch {
// Log.d(TAG, First Child)
// throw AssertionError(First child is cancelled)
// }
// val secondChild launch {
// Log.d(TAG, Second Child)
// }
// Log.d(TAG, Cancelling supervisor)
// }
// Log.d(TAG, End)
// }// 最新的写法runBlocking {Log.d(TAG, Start)launch {delay(100)Log.d(TAG, Task from runBlocking)}supervisorScope {// 需要将CoroutineExceptionHandler作为参数才有效果不然会崩溃val firstChild launch(CoroutineExceptionHandler { _, _ - }) {Log.d(TAG, First Child)throw AssertionError(First child is cancelled)}val secondChild launch {Log.d(TAG, Second Child)}Log.d(TAG, Cancelling supervisor)}Log.d(TAG, End)}}