blob: ee655967f3238e1fbaf2b8bd5910385b6254d980 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
import scala.actors.{Futures, TIMEOUT}
import scala.actors.Actor._
object Test {
def compute(): Option[Boolean] = {
val fts = for (j <- 0 until 5) yield Futures.future {
receiveWithin (100) {
case TIMEOUT => true
case other => false
}
}
val done = Futures.awaitAll(2000, fts.toArray: _*) // list to array, as varargs
if (done.contains(None))
None
else
Some(true)
}
def main(args:Array[String]) : Unit = {
val ft = Futures.future {
val format = new java.text.DecimalFormat("000.00'ms'")
var iter = 1
val done = 11
while (iter < done) {
val start = System.nanoTime()
val result = compute()
val time = System.nanoTime() - start
result match {
case Some(result) =>
//printf("Iteration %2d succeeded after %s %n", iter, format.format(time / 1e6))
printf("Iteration %2d succeeded%n", iter)
iter += 1
case None =>
printf(">>>> Iteration %2d failed after %s <<<<< %n", iter, format.format(time / 1e6))
iter = done
}
}
}
ft()
}
}
|