假设我正在编写一个函数来发送一些并发的HTTP GET请求,并等待所有响应超时。如果至少有一个响应没有状态200
或者没有超时,我的函数应该返回失败。
我正在编写此函数tryGets
,如下所示:
import java.net.URL
import scala.concurrent.duration._
import scala.concurrent.{Await, ExecutionContext, Future}
import scala.util.Try
def unsafeGet(url: URL): String = {
val in = url.openStream()
scala.io.Source.fromInputStream(in).mkString
}
def futureGet(url: URL)
(implicit ec: ExecutionContext): Future[String] = Future {
unsafeGet(url)
}
def tryGets(urls: Seq[URL], timeOut: Duration)
(implicit ec: ExecutionContext): Try[Seq[String]] = Try {
val fut = Future.sequence(urls.map(futureGet))
Await.result(fut, timeOut)
}
有意义吗? 如果超时,它不会泄漏未来的实例吗?
答案 0 :(得分:1)
如果其中一个未来超时,那么未来的其余部分将继续执行,因为未来会非常渴望并将继续在执行环境中运行。您可以做的是折叠Urls,但这将连续执行它们。
std::set<int>