Как вы получаете объект, связанный с будущим актером?
Вопрос
Я хотел бы получить доступ к объекту, который возвращается из нереста будущего
import scala.actors.Future
import scala.actors.Futures._
class Object1(i:Int) {
def getAValue(): Int = {i}
}
object Test {
def main( args: Array[String] ) = {
var tests = List[Future[Object1]]()
for(i <- 0 until 10) {
val test = future {
val obj1 = new Object1(i)
println("Processing " + i + "...")
Thread.sleep(1000)
println("Processed " + i)
obj1
}
tests = tests ::: List(test)
}
val timeout = 1000 * 60 * 5 // wait up to 5 minutes
val futureTests = awaitAll(timeout,tests: _*)
futureTests.foreach(test => println("result: " + future()))
}
}
Выход из одного запуска этого кода:
Processing 0...
Processing 1...
Processing 2...
Processing 3...
Processed 0
Processing 4...
Processed 1
Processing 5...
Processed 2
Processing 6...
Processed 3
Processing 7...
Processed 4
Processing 8...
Processed 6
Processing 9...
Processed 5
Processed 7
Processed 8
Processed 9
result: <function0>
result: <function0>
result: <function0>
result: <function0>
result: <function0>
result: <function0>
result: <function0>
result: <function0>
result: <function0>
result: <function0>
Я пробовал будущее (). GetClass (), и выход
result: class scala.actors.FutureActor
То, что я хочу получить доступ к объектам OBJ1.
Спасибо
Брюс
Решение
Вам нужно сделать что-то вроде этого. Возвращение awaitAll
является List[Option[Any]]
. Отказ Это означает, что результат каждого будущего является вариант [любой], поэтому вам нужно совпадение, чтобы получить значение, и бросить его, чтобы получить в getAValue
futureTests.foreach(test => test match {
case Some(r) => println("result: " + r.asInstanceOf[Object1].getAValue)
})
Кончик шляпы @James Iry.
Не связан с StackOverflow