Consider adding Future.firstCompletedOf with predicate
def firstCompletedOf[T](futures: Iterable[Future[T]], predicate: T => Boolean, timeout: Timeout = Timeout.never): Future[T] = { val futureResult = new DefaultPromise[T](timeout) val completeFirst: Future[T] ⇒ Unit = _.value.foreach{result => result.fold(futureResult completeWithException _, r => if(predicate(r)) futureResult complete result) } for (f ← futures) f onComplete completeFirst futureResult }
Leave a comment
on 2011-08-19 11:26 *
By viktorklang
Assigned to set to viktorklang
Status changed from New to Accepted
on 2011-08-19 11:29 *
By viktorklang
Implemented as this:
def find[T](predicate: T ⇒ Boolean, timeout: Timeout = Timeout.default)(futures: Iterable[Future[T]]): Future[Option[T]]
Also Java API.
Does not propagate exceptions
def find[T](predicate: T ⇒ Boolean, timeout: Timeout = Timeout.default)(futures: Iterable[Future[T]]): Future[Option[T]]
Also Java API.
Does not propagate exceptions
Fixed in wip-props, will be merged into master later.
Updating tickets (#967, #974, #975, #976, #980, #981, #989, #990, #992, #993, #994, #999, #1000, #1004, #1008, #1011, #1015, #1018, #1022, #1023, #1024, #1025, #1027, #1028, #1029, #1030, #1032, #1033, #1036, #1047, #1053, #1062, #1067, #1068, #1069, #1072, #1075, #1078, #1082, #1102, #1107, #1110, #1111, #1115, #1116, #1121, #1122, #1123, #1124)