scala intervals period

Ejecuta una función periódicamente en Scala



intervals period (4)

Quiero llamar a una función arbitraria cada n segundos. Básicamente quiero algo idéntico a SetInterval desde Javascript. ¿Cómo puedo lograr esto en Scala?


Actualización para Akka, en combinación con el "Ejemplo de Hello World" desde aquí: Guías de Lightbend utilizando las instrucciones de aquí: Scheduler

import scala.concurrent.duration._ howdyGreeter ! WhoToGreet("Akka") val cancellable = system.scheduler.schedule( 0 seconds, 1 seconds, howdyGreeter, Greet )


Podrías usar cosas estándar de java.util.concurrent :

import java.util.concurrent._ val ex = new ScheduledThreadPoolExecutor(1) val task = new Runnable { def run() = println("Beep!") } val f = ex.scheduleAtFixedRate(task, 1, 1, TimeUnit.SECONDS) f.cancel(false)

O java.util.Timer :

val t = new java.util.Timer() val task = new java.util.TimerTask { def run() = println("Beep!") } t.schedule(task, 1000L, 1000L) task.cancel()


Puede ser más funcional como en

import java.util.TimerTask import java.util.Timer object TimerDemo { implicit def function2TimerTask(f: () => Unit): TimerTask = { return new TimerTask { def run() = f() } } def main(args : Array[String]) { def timerTask() = println("Inside timer task") val timer = new Timer() timer.schedule(function2TimerTask(timerTask),100, 10) Thread.sleep(5000) timer.cancel() } }


Si te encuentras en Akka, Scheduler es muy conveniente para esto:

val system = ActorSystem("mySystem", config) // ...now with system in current scope: import system.dispatcher system.scheduler.schedule(10 seconds, 1 seconds) { doSomeWork() }

También hay scheduleOnce para ejecución única.

Se aplican las advertencias habituales sobre el cierre sobre el estado mutable.