[英]Running a block with a timeout in Scala without using Futures?
有沒有辦法在沒有期貨的情況下運行 function 並在 Scala 中超時?
例如,類似:
val result = runWithTimeout (timeout, function}
避免Future
的原因是因為我們在一個復雜的運行環境中工作,我想避免跨越線程和管理 ExecutionContext。
一般來說,在 JVM 中,如果不應用一些效果系統,如 cat cats-effect
、 fs2
、 monix
或Zio
,是不可能的。
我們需要有另一個線程來觸發時間超時。 另一個問題是,當您使用runWithTimeout(Thread.sleep(1 hours))
調用時,它會釋放調用者線程,但會從線程池中吃掉線程 1 小時。
盡管如此,對於 go 這種方式,您可以執行以下操作:
object Execution {
def runWithTimeout[T](timeout: Duration)(f: => T)(implicit ec: ExecutionContext): Option[T] = {
try {
Some(Await.result(Future(f), timeout))
} catch {
case e: TimeoutException => None
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.