从未完成的未来

时间:2013-11-28 12:06:44

标签: scala concurrency future

需要测试一些可能导致超时的方法,我想为此创建一个辅助函数。它应返回永远完成的Future

def neverCompletes[T]: Future[T] = { ... }

但我想知道,我怎么能这样做?我可以这样:

def neverCompletes[T]: Future[T] = {
  val p = Promise[T]()
  future {
    while(true) { }
  } onComplete {
    case x => 
      p complete x // needed?
      println("something went wrong!!!") // something is wrong...
  }

  p.future
}

但应该有更好的方法来实现这一目标。我也不确定那里是否需要p complete x // needed?

1 个答案:

答案 0 :(得分:24)

<强>更新

在Scala 2.12中,将有一个方法Future.never,它返回一个永不完成的未来。


简单的事情。只需创建一个Promise并返回其Future,而不必填写它:

def neverCompletes[T]: Future[T] = Promise[T].future