0

所以我在 scala 中编写了一个迷你超时库,它看起来与这里的代码非常相似:How do I get hold of exceptions throw in a Scala Future?

我执行的函数要么成功完成,要么永远阻塞,所以我需要确保在超时时取消执行线程。

因此我的问题是:在超时时,awaitAll 是终止底层参与者,还是让它永远运行?

我正在考虑的一种替代方法是使用 java Future 库来执行此操作,因为可以调用一个显式的 cancel() 方法。

4

1 回答 1

0

[免责声明 - 我自己是 Scala 演员的新手] 当我阅读它时,scala.actors.Futures.awaitAll等到期货列表全部解决或直到超时。它不会Future.cancel,Thread.interrupt或以其他方式尝试终止Future; 你可以稍后再回来等待。

Future.cancel可能是合适的,但请注意,您的代码可能需要参与影响cancel操作 - 它不一定是免费的。 Future.cancel取消已安排但尚未开始的任务。它会中断正在运行的线程[设置一个可以检查的标志]......这可能会或可能不会确认中断。审查Thread.interruptThread.isInterrupted()。您的长时间运行的任务通常会检查它是否被中断(您的代码)并自行终止。各种方法(即Thread.sleepObject.wait其他方法)通过 throw 响应中断InterruptedException。您需要查看并理解该机制,以确保您的代码在这些限制内满足您的需求。看到这个

于 2012-07-25T04:58:23.110 回答