My apologies for the silence (eastern holidays).
On 29 Mar 2013, at 02:26, Jed Wesley-Smith wrote:
> I presume you also want to handle results in the order they arrive?
> And have some support for timeouts etc?
Exactly. Sounds very similar indeed.
With respect to my implementation: if we forget about the blocking and just want to order futures by their time of completion, is this a good way of doing it? For every completed future it starts at the front of a list of promises to find the first non-completed one...
def orderFutures[A](futures: Iterable[Future[A]]): Iterable[A] = {
import scala.concurrent.duration.Duration
val promises = Seq.fill(futures.size)(Promise[A]())
futures.foreach{_ onComplete (addToResults(_,promises))}
def addToResults(result: Try[A], prom: Seq[Promise[A]]): Unit = prom match {
case Seq() => ???
case Seq(promise, rest@_*) =>if(promise tryComplete result) () else addToResults(result, prom.tail)
}
promises
}
Thank you!
Maarten