我正在尝试执行执行网络调用的后台任务并将响应存储在数据库中。根据the documentation,后台任务应该使用Akka actor系统中的调度程序。我需要在这个actor中运行一个Future:
actorSystem.scheduler.scheduleOnce(delay = new FiniteDuration(0, TimeUnit.SECONDS)) {
val future = network.request()
future.flatMap(saveToDatabase(_))
}
因此,我有两个问题:
Future
值中的future
由network
对象返回,因此该对象负责执行触发Future
的代码,而不是Akka。所以你需要查看request
调用的文档,看看这个Future
有什么完成保证。
Future
调用返回的flatMap
使用创建此任务时范围内的默认执行上下文。但是saveToDatabase
的召唤并不能保证被调用,因为Future
可能会失败,而flatMap
只会被称为成功。
如果要跟踪此任务的状态,请在执行中的各个点向监视actor发送消息。然后其他演员可以向该监控演员询问该任务的进度。