gpt4 book ai didi

scala - 在Scala 2.10中杀死或使Future超时

转载 作者:行者123 更新时间:2023-12-03 16:14:51 26 4
gpt4 key购买 nike

你好,

我正在将Scala 2.10与新的Futures库一起使用,并且试图编写一些代码来测试无限循环。我使用scala.concurrent.Future在单独的线程中通过循环运行代码。然后,我想稍等片刻进行测试,然后终止单独的线程/将来。我看过Await.result,但这实际上并没有杀死 future 。有什么方法可以使新的Scala 2.10 future 超时或终止?

我宁愿不必为这个简单的部分添加诸如Akka之类的外部依赖项。

最佳答案

不要在家尝试。

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

class MyCustomExecutionContext extends AnyRef with ExecutionContext {
import ExecutionContext.Implicits.global
@volatile var lastThread: Option[Thread] = None
override def execute(runnable: Runnable): Unit = {
ExecutionContext.Implicits.global.execute(new Runnable() {
override def run() {
lastThread = Some(Thread.currentThread)
runnable.run()
}
})
}
override def reportFailure(t: Throwable): Unit = ???
}

implicit val exec = new MyCustomExecutionContext()
val f = future[Int]{ do{}while(true); 1 }
try {
Await.result(f, 10 seconds) // 100% cpu here
} catch {
case e: TimeoutException =>
println("Stopping...")
exec.lastThread.getOrElse(throw new RuntimeException("Not started"))
.stop() // 0% cpu here
}

关于scala - 在Scala 2.10中杀死或使Future超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14449862/

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