def resolve(url: String): Future[WSResponse] = ws.url(url).withFollowRedirects(true).get()
def validateAllLinks(links: List[String]) = ???
你将如何解决第二个功能?
我试过遍历,Future.sequence,Await ......
这是我最近的尝试:
def validateAllLinks(links: List[String]) = links.map(link =>
Await.result(resolve(link), Duration.create(3, TimeUnit.SECONDS))
)
这种方法的问题:
我得到了TimeoutExceptions和MaxRedirectException,我不想尝试/抓住
我不认为解决方案会并发,即使它有效。
提前致谢!
答案 0 :(得分:3)
随意使用Future.sequence
,它们将并行运行:
def validateAllLinks(links: List[String]): Future[List[WSResponse]] =
Future.sequence(links.map(resolve))
如果您在Await.result
之后致电Future.sequence
,它将等待并行操作完成:
import scala.concurrent.duration._
def validateAllLinks(links: List[String]): List[WSResponse] =
Await.result(Future.sequence(links.map(resolve)), 10 seconds)
但请注意Await.result
被视为不良做法,您应该尝试返回Future
,并让客户决定如何处理它。
更详细一点,说明为什么这是一个不好的做法: