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)
如果你看一下这个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没有有限超时的情况下使用.
| 归档时间: |
|
| 查看次数: |
3794 次 |
| 最近记录: |