我知道我做错了什么,mutable.ListBuffer
但我不知道如何解决它(以及对问题的正确解释)。
我简化了下面的代码以重现该行为。
我基本上是在尝试并行运行函数以在处理我的第一个列表时将元素添加到列表中。我最终“失去”了元素。
import java.util.Properties
import scala.collection.mutable.ListBuffer
import scala.concurrent.duration.Duration
import scala.concurrent.{Await, Future}
import scala.concurrent.{ExecutionContext}
import ExecutionContext.Implicits.global
object MyTestObject {
var listBufferOfInts = new ListBuffer[Int]() // files that are processed
def runFunction(): Int = {
listBufferOfInts = new ListBuffer[Int]()
val inputListOfInts = 1 to 1000
val fut = Future.traverse(inputListOfInts) { i =>
Future {
appendElem(i)
}
}
Await.ready(fut, Duration.Inf)
listBufferOfInts.length
}
def appendElem(elem: Int): Unit = {
listBufferOfInts ++= List(elem)
}
}
MyTestObject.runFunction()
MyTestObject.runFunction()
MyTestObject.runFunction()
返回:
res0: Int = 937
res1: Int = 992
res2: Int = 997
显然,我希望1000
一直返回。如何修复我的代码以保持“架构”但让我的 ListBuffer“同步”?