我有许多完全异步且大致同时开始的消耗性作品。我的意思是这样的:
for (i <- 1 to n) {
Future { startWork("work" + i) }
}
但是我需要添加一些时间延迟才能在不同的时间依次开始这些工作。例如,if (time lag = 1 seconds) => i-work 在 i 秒后开始。怎么能简单地做到这一点?
谢谢!
我有许多完全异步且大致同时开始的消耗性作品。我的意思是这样的:
for (i <- 1 to n) {
Future { startWork("work" + i) }
}
但是我需要添加一些时间延迟才能在不同的时间依次开始这些工作。例如,if (time lag = 1 seconds) => i-work 在 i 秒后开始。怎么能简单地做到这一点?
谢谢!
Play 集成了 Akka 进行调度。在 Play 的文档中,您可以找到一个以设置的延迟运行一次代码块的示例:
import play.api.libs.concurrent.Execution.Implicits._
Akka.system.scheduler.scheduleOnce(10.seconds) {
file.delete()
}
Akka 的文档有一些关于其调度程序的更多信息。示例中的参数 ( 10.seconds
) 是 a FiniteDuration
,因此在您的情况下,您可能希望将其设置为i seconds
.
哟道格!我听说您喜欢 Futures,所以我将向您展示如何在未来执行 Future,以便您将来可以从您的 Future 组合其他 Futures。
import play.api.concurrent.Akka
import scala.concurrent._
import scala.concurrent.duration._
val promise = Promise[Unit]
Akka.system.scheduler.scheduleOnce(1.seconds) { promise.success() }
promise.future.map { _ => /* The body of the Future to be run in the future */ }
这应该是一个非阻塞解决方案,将 Future 的执行延迟到未来的某个时间。