问题描述
我目前陷入困境,答案可能在Google上的某个地方,但这次我不知道使用什么词,所以我希望有人能在这里为我提供帮助。
我有一个元素列表,我想对每个元素应用功能,但是我想在每个元素之间等待。
我现在有类似的东西:
val numbers = List(10,11,12,13,14)
numbers.foreach(i => {
//do some stuff with i
Thread.sleep(1000)
})
但是我认为这不是正确的方法。也许有一种方法可以不阻止所有内容?
解决方法
在JVM上的纯Scala中,您可以使用Java的ScheduledExecutorService
:
val list: List[Int] = List(1,2,3)
private val es: ScheduledExecutorService = Executors.newScheduledThreadPool(1)
type ResultType = Unit
val futures: Seq[ScheduledFuture[ResultType]] = list.zipWithIndex.map { case (integer,index) =>
val runnable: Callable[ResultType] = () => println(integer)
es.schedule(runnable,index*1,duration.SECONDS)
}
实际上有一个关于计划的Scala Future的主题-Scala - ScheduledFuture
借助this approach,您可以编写与我上面介绍的相同的逻辑:
val list: List[Int] = List(1,3)
type ResultType = Unit
val futures: Seq[Future[ResultType]] = list.zipWithIndex.map { case (integer,index) =>
DelayedFuture(index * 1.seconds)(println(integer))
}