我有List[Future[A]]。我想阻止我的執行緒并獲得List[Try[A]]“現在”。找不到好的解決方案。
uj5u.com熱心網友回復:
您可以使用Await:
https ://www.scala-lang.org/api/2.13.3/scala/concurrent/Await$.html
import scala.concurrent.Await
import scala.concurrent.duration._
import scala.util.Try
val res = Try(Await.result(someFuture, 10.seconds))
也就是說,阻塞很少是一個好主意。期貨意味著由諸如flatMap.
uj5u.com熱心網友回復:
既然您已經澄清了您的問題(在對我的另一個答案的評論中),這里有一種可能性:
import scala.util._
import scala.concurrent._
def partitionFutures[A](
l: List[Future[A]])(
implicit ec: ExecutionContext
): Future[(List[A], List[Throwable])] = {
Future.traverse(l)(_.transform(Success.apply)).map { (trys: List[Try[A]]) =>
val as = trys.collect { case Success(a) => a }
val errs = trys.collect { case Failure(err) => err }
as -> errs
}
}
型別與您建議的型別不太一樣,但不清楚為什么您需要一對串列的串列,因此我將其簡化為一對串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/493062.html
標籤:斯卡拉
上一篇:如何使用查找來知道要執行的函式?
