2012-11-11 4 views
0

Lorsque je crée un avenir ad-hoc et l'appeler cela fonctionne bien.awaitAll ne fonctionne pas dans mon test

 
scala> val f = future {Thread.sleep(1000 * 60 * 1); println("Hi"); 20} 
f: scala.actors.Future[Int] = 

scala> f() 
Hi 
res39: Int = 20 

Lorsque je crée le même futur et appelle awaitAll cela ne fonctionne pas. Le awaitAll renvoie None comme si le futur n'était pas résolu.

 
scala> val f = future {Thread.sleep(1000 * 60 * 1); println("Hi"); 20} 
f: scala.actors.Future[Int] = 

scala> awaitAll(1000 * 60 * 2, f) 
Hi 
res40: List[Option[Any]] = List(None) 
+0

le même problème? http://stackoverflow.com/questions/9305845/how-to-get-somex-from-the-results-of-futuresawaitall –

+0

@JCamphor Oui, probablement. Comment suggérez-vous de corriger le code ci-dessus? – Michael

Répondre

1

préfère le future sur Future qui est dépréciée.

Que diriez-vous: « Préférez le Future de l'avenir scala.concurrent au Future du passé dans scala.actors, qui est dépréciée. »

Comme d'habitude, Heather Miller le dit le mieux; voir le commentaire.

object Test extends App { 
    import scala.concurrent._ 
    import Await._ 
    import Future._ 
    import duration._ 
    import ExecutionContext.Implicits.global 

    val data = List(1,2,3) 
    result(traverse(data)(i => future{10 * i}), Duration("10 sec")) foreach println 
} 
+2

"Préférer le futur futur sur obsolète." Pouvons-nous avoir cela en anglais s'il vous plaît?! –

+0

http://stackoverflow.com/a/13099594/1296806 dans les mots de Heather Miller. –

1

J'espère vous aider.

import scala.actors._ 

object StackOverFlow13331294 extends App { 
    Futures awaitAll (1000 * 60 * 1, 
      Seq(new StackOverFlow13331294 !! "execute"): _*) foreach println 
} 

class StackOverFlow13331294 extends Actor { 
    start 
    override def act = react { 
     case "execute" => 
      // Thread sleep 1000 * 60 * 1 ? 
      println("Hi") 
      reply("20") 
    } 
}