Что-то, что еще не было упомянуто, - awaitEither , метод объекта Futures пакета актеров. awaitEither возвращает результат из первой пары фьючерсов для завершения, так что, например, можно использовать что-то вроде этого:
awaitEither(future{task}, alarm(timeoutPeriod))
и затем оделись в соответствии с предложенным методом:
def runWithTimeout[T](timeoutPeriod: Int, timeoutValue: T)(task: => T) = {
awaitEither(future{task}, alarm(timeoutPeriod)) match {case () => timeoutValue case x => x}
}
alarm возвращает Единицу, которая присваивается значению типа Any, поэтому awaitEither возвращает что-то, с чем можно сопоставить шаблон.