在斯卡拉的安排执行(Scheduled Executor in Scala)

2019-09-15 15:55发布

在Java中,我可以使用的安排执行程序安排任务给定延迟后运行。 我可以用它在Scala中,但我不知道是否有针对Scala的 API。

是否有任何的Scala API(而不是Scheduled Executor中的Java)计划任务?

Answer 1:

阿卡也有类似的与调度的东西:

http://doc.akka.io/api/akka/2.1.4/#akka.actor.Scheduler

您可以从演员系统中的一个:

val actorSystem = ActorSystem()
val scheduler = actorSystem.scheduler
val task = new Runnable { def run() { log.info("Hello") } }
implicit val executor = actorSystem.dispatcher

scheduler.schedule(
  initialDelay = Duration(5, TimeUnit.SECONDS),
  interval = Duration(10, TimeUnit.SECONDS),
  runnable = task)

如果使用的是阿卡或基于它的东西,如播放,这将是一段路要走。



Answer 2:

我一直在寻找一个API阶为计划的执行,以及。

Java的ScheduledExecutor:

  • 使用一个线程池运行调度和操作超时,所以不需要每个超时线程
  • 没有必要阿卡

我写了一个小斯卡拉包装为单任务调度。 见要点: https://gist.github.com/platy/8f0e634c64d9fb54559c



Answer 3:

此前,重复的问题,导致了这个玩具。

scala> implicit class Expiry(val d: Deadline) extends AnyVal {
     | def expiring(f: =>Unit) =
     | future(Await.ready(Promise().future, d.timeLeft)) onComplete (_ => f)
     | }
defined class Expiry

scala> val x = new SyncVar[Boolean]()
x: scala.concurrent.SyncVar[Boolean] = scala.concurrent.SyncVar@597d9abe

scala> 10 seconds fromNow expiring {
     | println("That's all, folks.")
     | x.put(true)
     |     }

scala> x.take() 
That's all, folks.
res1: Boolean = true


Answer 4:

您可以使用scalaz的任务,

import scala.concurrent.duration.{FiniteDuration, SECONDS}
import scalaz.concurrent.Task
Task.schedule(Console.println("time's up"), FiniteDuration(5, SECONDS)).runAsync { _ => }


Answer 5:

作为替代,有Monix调度太: https://monix.io/docs/3x/execution/scheduler.html

它使用Java的Scheduled Executor的背后,却是包裹和透明。

你需要实现一些Runnable执行,这比阿卡更轻Actor

例如,你可以这样做(从资料为准):

lazy val scheduler =
  Scheduler.singleThread(name="my-thread")

// First execution in 3 seconds, then every 5 seconds
val c = scheduler.scheduleAtFixedRate(
  3, 5, TimeUnit.SECONDS,
  new Runnable {
    def run(): Unit = {
      println("Fixed delay task")
    }
  })

// If we change our mind and want to cancel
c.cancel()


文章来源: Scheduled Executor in Scala