【发布时间】:2014-02-06 21:47:49
【问题描述】:
我正在使用来自 Scala 2.10.X 的 Future API。
这是我的用例:
object Class1 {
def apply(f: (Int) => Future[String])(i: Int): Future[String] = {
val start = DateTime.now
val result = f(i)
result.onComplete{
case _ => println("Started at " + start + ", ended at " + DateTime.now)
}
result
}
}
我认为非常简单:我正在为我的未来添加一个 onComplete 回调。现在,我想知道是否有一种方法可以在 onComplete 完成执行时添加回调 - 在此示例中,知道日志记录何时完成。
假设我的result 实例注册了3 个onComplete,我能知道它们何时都已被执行吗?我不认为这是可能的,但谁知道:)
也许另一种方法是调用map 而不是onComplete 来返回Future 的新实例:
def apply(f: (Int) => Future[String])(i: Int): Future[String] = {
val start = DateTime.now
f(i) map {
case r =>
println("Started at " + start + ", ended at " + DateTime.now)
r
}
}
但我不确定它是否会保持相同的行为。
编辑:澄清一下 - Future 只有 一个 实例,我在 相同 实例上调用 onComplete 3 次(嗯,在我的示例仅一次,但假设我调用它 N 次)并且我想知道由于相同的 Future 实例的完成,3 个回调何时执行完毕。
【问题讨论】:
-
等一下,我可能回答错了。你是说你有 1 个
Future并且你已经完成了 3 次onComplete还是 3 个Future每个都有一个onComplete?因为如果是第二个,我的回答就是垃圾。 -
@wheaties 查看我的编辑:是的,只有一个 Future,我们在同一个实例上调用 onComplete N 次。