gpt4 book ai didi

android - 带有 scala.concurrent.Future 的 Android 上的 Scala 不会在系统错误/输出时报告异常

转载 作者:行者123 更新时间:2023-11-29 17:48:54 24 4
gpt4 key购买 nike

我们使用 Scala 2.11 构建了一个 android 应用程序。我们将 scala.concurrent.Future 用于异步后台任务。问题是,如果在 Future block 内抛出异常,我们在 logcat 中看不到任何异常。

我们已经用我们自己的记者创建了一个执行上下文:

lazy val reporter: (Throwable => Unit) = {
t =>
t.printStackTrace()
}

implicit lazy val exec = ExecutionContext.fromExecutor(
new ThreadPoolExecutor(10, 100, 5, TimeUnit.MINUTES,
new LinkedBlockingQueue[Runnable]), reporter)

即使我在 reporter 内部设置断点,调试器也永远不会在此处停止,即使我强制在 Future {...} block 中抛出异常。我们做错了什么

最佳答案

根据您的评论,您似乎根本没有根据需要使用 Future。当 Future 计算期间发生某些异常时,它会转换为失败情况(如 Try 失败,但在异步上下文中),例如:

scala> Future { 10 / 0 }
res21: scala.concurrent.Future[Int] = scala.concurrent.impl.Promise$DefaultPromise@24f3ffd

如您所见,没有抛出或打印异常。要处理此异常,您需要使用回调,即 onCompleteonFailure,例如:

scala> res21.onFailure { case error => println(s"Error: ${ error.getMessage }") }
Error: / by zero

类(class)中身穿迷幻 T 恤的 Erik Meijer 对 future 和二元性做了很好的介绍 intro to Reactive Programming .

关于android - 带有 scala.concurrent.Future 的 Android 上的 Scala 不会在系统错误/输出时报告异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24450738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com