Akka Ask模式的Timeout阻止代码执行

ind*_*ngh 1 parallel-processing scala akka

我刚开始学习Scala的Akka库.我遇到了使用Ask模式从Actor获取响应(就像启动一个线程来完成一些计算并获得结果).

下面是我的代码,其中我使用了Ask模式,其中Timeout阻止它执行.为什么?

import akka.actor._
import akka.routing._
import akka.util.Timeout
import akka.pattern.ask
import java.math.BigInteger
import java.time.LocalDate
import scala.concurrent.duration._
import scala.concurrent.Await
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global 
import scala.util.{Success, Failure}


object Main extends App {

  val system = ActorSystem("listRetriever")
  val workerActor = system.actorOf(Props[Worker], "workerActor")
  val listRetriever= new listRetriever
  implicit val timeout = Timeout(10 seconds)

  val future = workerActor ? new Work(date, listRetriever)

  future onComplete {
    case Success(result: Result) => println(result.getList())
    case Failure(result) => println(result)
  }

  system.shutdown
}
Run Code Online (Sandbox Code Playgroud)

Rya*_*yan 6

如果你看一下这个Timeout类的定义,你会发现它需要一个FiniteDuration:

case class Timeout(duration: FiniteDuration) extends Product with Serializable
Run Code Online (Sandbox Code Playgroud)

http://doc.akka.io/api/akka/current/#akka.util.Timeout

这是故意的,因此ask具体不会永远运行.

所以不,你不能在ask没有有限超时的情况下使用.