我想要一个线程安全(不可变)的 Scala 类来完成一项长期工作。对于某些极端情况,任务需要很长时间,所以我想实现超时。在不可变类中实现这一点的最佳方法是什么?
我的第一次尝试是使用这样的隐式参数:
class Worker(val input: String) {
def start: String = {
implicit val startTimeStamp = new TimeStamp
doSomething1 + doSomething2
}
def doSomething1()(implicit startTimeStamp: TimeStamp): String = { ... }
def doSomething2()(implicit startTimeStamp: TimeStamp): String = {
...
checkTimeout
...
}
}
class TimeStamp { val start = System.currentTimeMillis }
这应该可以,但是仍然有很多带有隐式参数的样板代码。(在实际代码中,我doSomething
在工人类中有数百个深度嵌套的函数。)在 Scala 中有没有更漂亮的方法来做到这一点?