在将来抛出异常

时间:2017-07-05 02:19:50

标签: scala

我需要在我的程序中抛出一个异常,但是异常会在将来发生,所以它会被抛出到另一个线程中。如何使这个例子有效?

object TestFutures extends App {

  val f0 = Future { 0 }
  val f1 = Future { 1 }
  val fx = Seq(f0,f1)

  fx.map { 
    seq => seq.map {  i =>
        println("i="+i)
        if (i == 1)
              throw new Exception("This is an exception")

    }
  }


  Thread.sleep(5000)
}

这是程序输出,但我需要它抛出异常:

i=0
i=1

2 个答案:

答案 0 :(得分:3)

结果仍然是未来

 val stillFutures: Seq[Future[Unit]] = fx.map {
    seq => seq.map {  i =>
      println("i="+i)
      if (i == 1)
        throw new Exception("This is an exception")

    }
  }

您可以查看成功/失败的每个未来

stillFutures.foreach{
_.onComplete{
  case Success(_) => // do nothing
  case Failure(ex) => throw ex
}}

答案 1 :(得分:0)

  
    

如何使这个例子有效?

  

您可以使用for将其设为

val f0 = Future { 0 }
val f1 = Future { 1 }
val fx = Seq(f0,f1)

for(seq <- fx){
  for(i <- seq) {
    println("i="+i)
    if (i == 1) {
      throw new Exception("This is an exception")
    }
  }
}
Thread.sleep(5000)