【问题标题】:Conditional exception raising in a flow block在流程块中引发条件异常
【发布时间】:2013-05-19 17:06:51
【问题描述】:

在使用 Akka 的数据流 DSL 时,我曾两次遇到需要在未来有条件地抛出异常。我就是这样做的:

flow {
  // ...
  if (someCond)
    shiftUnit(throw new SomeException)
  else
    Future().apply()
  // ...
}

这是正确的方法吗?还是有更好的方法?

【问题讨论】:

    标签: scala akka future continuations dataflow


    【解决方案1】:

    该方法似乎是正确的(尽管我的知识有点生疏),您甚至可以省略另一个分支,以下对我有用(Scala 2.10.1):

    flow { if (x == 2) shiftUnit(throw new Exception) }
    

    导致Future[Unit]

    【讨论】:

    • 我也有类似if (someCond) { methodReturningFuture(product)() } else { Future().apply() }的代码。我可以以某种方式将else 分支放在这里吗?
    • 不,你需要返回正确的东西(上面是 Unit)。需要在 false 分支中产生的值是什么?一种更短的包装方法是 Future.successful(x) (或失败,就此而言)。
    • 然后你可以使用Future.successful(())创建一个,这样可以节省你往返线程池的时间。
    猜你喜欢
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2013-02-05
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多