我有一个基本上做平均的 scala 演员实现。我推送一个条目,维护一个总数和一个计数并计算出平均值。发生的事情是,当我在测试期间以紧密的循环运行它时,我错过了一个条目,我相信这是最后一个。演员是这样的:
val actor = new Actor { def act = react {
case v: Long => addEntry(v); act
case _ => ()
}}.start()
编辑: addEntry 的实现是这样的:
private def addEntry(v: Long) {
total = total + v
count = count + 1
avg = total / count
}
并且添加基本上是actor ! 10
等等
在测试中调用 stop 后,我等待大约 200 毫秒以确保队列得到处理。(或者我认为这就是我正在做的,这是问题所在吗?)
Edit2:基本上,我现在认为,因为我在一个紧密的循环中设置这些值,然后立即调用 exit,最后一个或多个条目是/没有被处理或被删除。我在循环结束之间放了一个小睡眠(实际上是 CountDownLatch.await 和 actor.stop,现在我不能让测试失败。