期货如何在Akka演员中执行

问题描述 投票:-1回答:1

我正在尝试执行执行网络调用的后台任务并将响应存储在数据库中。根据the documentation,后台任务应该使用Akka actor系统中的调度程序。我需要在这个actor中运行一个Future:

    actorSystem.scheduler.scheduleOnce(delay = new FiniteDuration(0, TimeUnit.SECONDS)) {
        val future = network.request()
        future.flatMap(saveToDatabase(_))
    }

因此,我有两个问题:

  1. 这个未来是否可以保证执行(完成)?
  2. 是否有可能其他请求跟进此任务的状态(是否已完成)?
scala playframework-2.0 akka future
1个回答
0
投票

Future值中的futurenetwork对象返回,因此该对象负责执行触发Future的代码,而不是Akka。所以你需要查看request调用的文档,看看这个Future有什么完成保证。

Future调用返回的flatMap使用创建此任务时范围内的默认执行上下文。但是saveToDatabase的召唤并不能保证被调用,因为Future可能会失败,而flatMap只会被称为成功。

如果要跟踪此任务的状态,请在执行中的各个点向监视actor发送消息。然后其他演员可以向该监控演员询问该任务的进度。

© www.soinside.com 2019 - 2024. All rights reserved.