* previous `schedule` method is trying to maintain a fixed average frequency over time, but that can result in undesired bursts of scheduled tasks after a long GC or if the JVM process has been suspended, same with all other periodic scheduled message sending via various Timer APIs * most of the time "fixed delay" is more desirable * we can't just change because it's too big behavioral change and some might depend on previous behavior * deprecate the old `schedule` and introduce new `scheduleWithFixedDelay` and `scheduleAtFixedRate`, when fixing the deprecation warning users should make a concious decision of which behavior to use (scheduleWithFixedDelay in most cases) * Streams * SchedulerSpec * test both fixed delay and fixed rate * TimerSpec * FSM and PersistentFSM * mima * runnable as second parameter list, also in typed.Scheduler * IllegalStateException vs SchedulerException * deprecated annotations * api and reference docs, all places * migration guide
33 lines
691 B
Scala
33 lines
691 B
Scala
/*
|
|
* Copyright (C) 2017-2019 Lightbend Inc. <https://www.lightbend.com>
|
|
*/
|
|
|
|
package docs.actor
|
|
|
|
object TimerDocSpec {
|
|
//#timers
|
|
import scala.concurrent.duration._
|
|
|
|
import akka.actor.Actor
|
|
import akka.actor.Timers
|
|
|
|
object MyActor {
|
|
private case object TickKey
|
|
private case object FirstTick
|
|
private case object Tick
|
|
}
|
|
|
|
class MyActor extends Actor with Timers {
|
|
import MyActor._
|
|
timers.startSingleTimer(TickKey, FirstTick, 500.millis)
|
|
|
|
def receive = {
|
|
case FirstTick =>
|
|
// do something useful here
|
|
timers.startTimerWithFixedDelay(TickKey, Tick, 1.second)
|
|
case Tick =>
|
|
// do something useful here
|
|
}
|
|
}
|
|
//#timers
|
|
}
|