我希望为一个长时间运行的任务创建一个线程安全(不可变)的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中是否有更优美的方式来实现呢?