내가 안전하게 지금까지var를 사용하지 않고 자체 취소 폴러를 구현하는 방법은 무엇입니까?
akka.actor.Cancellable
의 인스턴스를 유지하는 VAR를 사용하지 않고 자체 취소 폴러를 구현할 수 있는지 궁금 해요, 난 당신이 아래의 예에서 보는 것과 같은 것을 함께했다.
tick(1, 5, context.system.scheduler.schedule(Duration.Zero, 3 seconds, self, "tick"))
로 기본적으로 동일합니다 : 그것은 핫 스왑이 폴러가 일정 선 즉,을 발생하기 전에 "틱"메시지가 전달되지 않을 것이라고 가정하는 것이 안전 경우, 궁금 해요
그래서 어떤 경우에는 hotswap이 발생하기 전에 첫 번째 틱이 수신 될 것이라고 생각합니다 ... 생각하십니까?
import akka.actor.{Cancellable, ActorSystem}
import akka.actor.ActorDSL._
import concurrent.duration._
object PollerDemo {
def run() {
implicit val system = ActorSystem("DemoPoller")
import system.dispatcher
actor(new Act{
become {
case "tick" => println("UH-OH!")
case "start" =>
become {
tick(1, 5, context.system.scheduler.schedule(Duration.Zero, 3 seconds, self, "tick"))
}
}
def tick(curr:Long, max:Long, poll:Cancellable):Receive = {
case "tick" => {
println(s"poll $curr/$max")
if(curr > max)
cancel(poll)
else
become{ tick(curr + 1, max, poll) }
}
}
def cancel(poll:Cancellable) {
println("cancelling")
poll.cancel()
println(s"cancelled successfully? ${poll.isCancelled}")
println("shutting down")
context.system.shutdown()
}
}) ! "start"
system.awaitTermination(1 minute)
}
}
액터 기반 프로그래밍의 요점은 액터의 인스턴스 내에서 액터를 보호함으로써 장기적이고 공유되며 변경 가능한 상태가되는 것입니다. –
흠, 사람들은 제목에 너무 집중하고 있습니다. 내가 너희들을 위해 그것을 고쳐 줄게 – Andrey