gpt4 book ai didi

scala - Await#result 抛出的异常

转载 作者:行者123 更新时间:2023-12-02 17:32:28 25 4
gpt4 key购买 nike

给定以下代码:

import spray.http._
import spray.client.pipelining._
import scala.concurrent.Future

implicit val system = ActorSystem()
import system.dispatcher // execution context for futures

val pipeline: HttpRequest => Future[HttpResponse] = sendReceive

val response: Future[HttpResponse] = pipeline(Get("http://spray.io/"))

以下伪代码函数等待 10 秒,如果 HttpResponse 返回,则返回“GOOD”,或者在 Await#result 异常时返回“BAD”(参见 docs

import scala.concurrent.Await
import scala.concurrent.duration._

def f(fut: Future[HttpResponse]): String = {
try {
val result = Await.result(fut, 10.seconds)
"GOOD"
}
catch e @ (_: InterruptedException | _: IllegalArgumentException
| _: TimeoutException ) => "BAD"
}

在我的catch中,是否只需要捕获Await#result抛出的异常?换句话说,我在这里没有捕捉到任何可能的异常吗?

最佳答案

Await.result 本身可以抛出您捕获的异常,但是,如果它等待的 future 没有成功完成,它会转发 future 包含的异常。您可能想从这里阅读阻塞部分:Futures and Promises .

所以是的,可能有您没有捕捉到的异常,任何可能由 HttpResponse 计算失败导致的异常。

在实际代码中阻塞通常是不好的,应该只用于测试目的,但如果你真的需要,我建议将 Await 包装在 scala.util.Try 中,这样你就可以稍后优雅地操作它,并保留失败的时间和原因的信息。

关于scala - Await#result 抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31303674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com