关于异常处理如何与协同程序一起使用,我感到非常困惑.
我希望有一个挂起函数链可以像同步代码一样在它们之间传递异常.因此,如果说Retrofit抛出IOException,我可以在挂起函数链的开头处理该异常,例如在演示者中向用户显示错误.
我做了这个简单的例子来尝试协同程序但是如果我取消注释要么在Exception无法运行之后抛出异常调用代码但是Exception不会使应用程序崩溃.
package com.example.myapplication
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.widget.Button
import android.widget.TextView
import kotlinx.coroutines.experimental.delay
import kotlinx.coroutines.experimental.launch
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val text = findViewByIdetonClickListener {
launch {
count++
// throw Exception("Boom")
val string = delayedStringOfInt(count)
runOnUiThread { text.text = string }
}
}
}
suspend fun delayedStringOfInt(int: Int): String {
delay(1000)
// throw Exception("Boom")
return int.toString()
}
}
我尝试过使用async和CoroutineExceptionHandler.
最佳答案
使用异步时,您应该在某处等待结果,这样您就不会丢失任何异常.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。