Scala 如何从期货交易的结果中获得一些(x)?

Scala 如何从期货交易的结果中获得一些(x)?,scala,actor,Scala,Actor,全部 我编写了以下简单代码来测试scala.actors // java version "1.7.0_02" // Scala code runner version 2.9.1.final // Windows 7 Ultimate sp1 64-bit import scala.actors._ import scala.collection.mutable.ArrayBuffer object FutureResults extends App { val t1 = Syste

全部

我编写了以下简单代码来测试scala.actors

// java version "1.7.0_02"
// Scala code runner version 2.9.1.final
// Windows 7 Ultimate sp1 64-bit
import scala.actors._
import scala.collection.mutable.ArrayBuffer

object FutureResults extends App {
    val t1 = System.currentTimeMillis
    val (timeout, results) = (1000, new ArrayBuffer[Future[_]])
    for (i <- 0 until 3) results += new FutureResultsActor !! "execute"
    val options = Futures awaitAll (timeout, results:_*)

    val t2 = System.currentTimeMillis
    println("spent: %,d ms" format t2 - t1)
    options foreach println
    results foreach { i => println("isSet: %b" format i.isSet) }

    Thread sleep timeout

    val t3 = System.currentTimeMillis
    println("spent: %,d ms" format t3 - t1)
    options foreach println
    results foreach { i => println("isSet: %b" format i.isSet) }
}

class FutureResultsActor extends Actor {
    start
    override def act = react { case "execute" => Futures future "done" }
}
期货的Scaladoc#awaitAll说:

The result of a future that resolved during the time span is its value wrapped in Some.
The result of a future that did not resolve during the time span is None.
超时值是否太小?好的,我将该值更改为5000毫秒,然后重试:

spent: 5,070 ms
None
None
None
isSet: false
isSet: false
isSet: false

spent: 10,093 ms
None
None
None
isSet: false
isSet: false
isSet: false
都没有。为什么

如何从期货交易的结果中获得一些(x)


有错误代码吗?

确实,它们都超时了。真是悲剧!原因是:你没有发送演员的回复,或者至少没有正确发送。我不确定什么是“未来”,但是。。。我的理解是,从演员内部回答的正确方式如下:

class FutureResultsActor extends Actor {
  start
  override def act = react { case "execute" => reply("done") } // Use reply()!
}
这样做让我得到了这样的结果:

spent: 150 ms
Some(done)
Some(done)
Some(done)
isSet: true
isSet: true
isSet: true
spent: 1,165 ms
Some(done)
Some(done)
Some(done)
isSet: true
isSet: true
isSet: true

根据文档,
Futures.future
安排执行给定的实体,返回表示结果的future。你是对的,他忘了回复,但是他想返回期货,所以应该是
回复(futures.future(“done”)
@fotNelton你确定吗?他已经给演员们发了消息!!自动返回未来的运算符,不是吗?而且,如果我这样做,一些人会被“填满”,而不是“完成”。谢谢大家,特别是Destin。回答(“完成”)令我满意。我做了一些。非常感谢。@Destin:My bad,没有对
Some
的输出给予足够的关注。确实是
spent: 150 ms
Some(done)
Some(done)
Some(done)
isSet: true
isSet: true
isSet: true
spent: 1,165 ms
Some(done)
Some(done)
Some(done)
isSet: true
isSet: true
isSet: true