Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala中的计划执行器_Scala_Scheduled Tasks - Fatal编程技术网

Scala中的计划执行器

Scala中的计划执行器,scala,scheduled-tasks,Scala,Scheduled Tasks,在Java中,我可以使用它来安排任务在给定延迟后运行。我可以在Scala中使用它,但我想知道是否有一个Scala API用于此 是否有任何Scala API(与Java中的Scheduled Executor相反)来调度任务?Akka与调度器有类似之处: 您可以从actor系统获得一个: val actorSystem = ActorSystem() val scheduler = actorSystem.scheduler val task = new Runnable { def run(

在Java中,我可以使用它来安排任务在给定延迟后运行。我可以在Scala中使用它,但我想知道是否有一个Scala API用于此


是否有任何Scala API(与Java中的
Scheduled Executor
相反)来调度任务?

Akka与调度器有类似之处:

您可以从actor系统获得一个:

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)

如果您使用的是Akka或基于它的东西,比如Play,那将是一个不错的选择。

我一直在寻找一个用于计划执行的scala api

Java的ScheduleXecutor:

  • 使用线程池来运行调度程序和操作超时,因此每次超时不需要线程
  • 不需要阿克卡
我为单任务调度编写了一个小型scala包装器。见要点:
您可以使用scalaz的任务

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

作为替代方案,还有Monix调度程序:

它在后面使用Java的
调度执行器
,但它是包装的和透明的

您需要实现一些要执行的
Runnable
,这比Akka
Actor
要轻

例如,您可以执行以下操作(摘自文档):

lazy val调度器=
Scheduler.singleThread(name=“my thread”)
//先在3秒内执行,然后每5秒执行一次
val c=调度程序.scheduleAtFixedRate(
3,5,时间单位。秒,
新Runnable{
def run():单位={
println(“固定延迟任务”)
}
})
//如果我们改变主意想取消
c、 取消

为什么人们会认为Scala==Akka?噢,谢谢你写了这篇文章。。我是Scala的新手,每次我在谷歌上搜索任何有关Scala的信息,我都会找到与Akka相关的答案。。您的评论对我来说非常清楚。@marius这只适用于
println
函数。我是否需要执行其他操作才能使其适用于任何其他函数(特别是同一类的方法)。在
Action.async
type类方法的控制器层中,这似乎不适用于我。我真的不知道原因,但它在项目的另一个层面对我起了作用。Akka就像一个病毒。