1
Futures#awaitAllの結果からいくつか(x)を得るには?
私は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" }
}
これが生成する:先物#awaitAllの
spent: 1,092 ms
None
None
None
isSet: false
isSet: false
isSet: false
spent: 2,137 ms
None
None
None
isSet: false
isSet: false
isSet: false
Scaladocは言う:
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
すべてはありません。なぜ...?
Futures#awaitAllの結果からいくつか(x)を得るには?
不正なコードはありますか?
このドキュメントによれば、 'Futures.future'は与えられたボディの実行を手配し、結果を表す未来を返します。あなたは答えるのを忘れていたのは間違いないが、彼は先物を返すことを望んでいたので、本当に返信するべきである(Futures.future( "done")) '。 – fotNelton
@fotNeltonそれは本当ですか?彼はすでに俳優にメッセージを送った!!演算子は自動的に未来を返しますが、そうではありませんか?また、私がそれをすると、「完了」よりもむしろ「」が満たされます。 –
Destin
ありがとう、特にデスティン。返信( "済")は私を満足させます。私はいくつかの(完了)sを取得します。どうもありがとう。 –