簡體   English   中英

在不使用期貨的情況下在 Scala 中運行一個超時的塊?

[英]Running a block with a timeout in Scala without using Futures?

有沒有辦法在沒有期貨的情況下運行 function 並在 Scala 中超時?

例如,類似:

val result = runWithTimeout (timeout, function}

避免Future的原因是因為我們在一個復雜的運行環境中工作,我想避免跨越線程和管理 ExecutionContext。

一般來說,在 JVM 中,如果不應用一些效果系統,如 cat cats-effectfs2monixZio ,是不可能的。

我們需要有另一個線程來觸發時間超時。 另一個問題是,當您使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM