У меня есть функция, которая требует много времени для вычисления
def longFunc = {Thread.sleep(30000); true}
, пока эта функция вычисляется, мне нужно пропинговать сервер, чтобы он продолжал ждать значения моей функции.Но ради аргумента, скажем, мне нужно запускать следующую функцию каждые 5 секунд, пока мой longFunc работает
def shortFunc = println("pinging server! I am alive!")
. Для этого у меня есть следующий фрагмент, и он работает, но мне интересно, есть лилучший образец для этого сценария
import scala.concurrent.{Await, Future}
import scala.concurrent.duration._
import java.util.{Timer, TimerTask}
import scala.concurrent.ExecutionContext.Implicits.global
def shortFunc = println("pinging server! I am alive!")
def longFunc = {Thread.sleep(30000); true}
val funcFuture = Future{longFunc}
val timer = new Timer()
def pinger = new TimerTask {
def run(): Unit = shortFunc
}
timer.schedule(pinger, 0L, 5000L) // ping the server every two minutes to say you are still working
val done = Await.result(funcFuture, 1 minutes)
pinger.cancel