检查主要演员是否完成

时间:2013-10-11 12:59:49

标签: scala playframework playframework-2.0 akka

因为我正在创建演员系统并创建主演员,即创建约15个其他演员的actorModel。现在,在actorModel完成之前返回true会发生什么。当actorModel完成任务或actor系统完成其任务时,我希望从此方法返回true。你知道我的意思。!帮助...

def doWork:Boolean ={
/* some code here....
 *
 */
val system=ActorSystem("system")
val actorModel=system.actorOf(Props(new ActorModel(userId,dateTimeId,form)),"actorModel")

true
}     

2 个答案:

答案 0 :(得分:2)

一种选择是询问actorModelAwait回复。

val f = actorModel ? AreYouFinished
Await.ready(f, timeout)

ActorModel需要跟踪AreYouFinished消息的发件人,并在任务完成时对其进行响应。

case AreYouFinished =>
  finishedWaiters = sender :: finishedWaiters

case TaskFinished =>
  finishedWaiters foreach (_ ! TaskFinished)

这是askAwait有用的用例:非演员代码等待演员的结果。您通常不会等待在演员中使用Await

请注意,演员系统相当重量级。您通常会在整个应用程序中使用一个,而不是在函数中根据需要触发一个。每个华夫饼悖论你也需要确保它关闭。但通常你会在你的应用程序关闭时将其关闭。

答案 1 :(得分:1)

在使用system.awaitTermination()返回之前使用true