因为我正在创建演员系统并创建主演员,即创建约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
}
答案 0 :(得分:2)
一种选择是询问actorModel
和Await
回复。
val f = actorModel ? AreYouFinished
Await.ready(f, timeout)
ActorModel
需要跟踪AreYouFinished
消息的发件人,并在任务完成时对其进行响应。
case AreYouFinished =>
finishedWaiters = sender :: finishedWaiters
case TaskFinished =>
finishedWaiters foreach (_ ! TaskFinished)
这是ask
和Await
有用的用例:非演员代码等待演员的结果。您通常不会等待在演员中使用Await
。
请注意,演员系统相当重量级。您通常会在整个应用程序中使用一个,而不是在函数中根据需要触发一个。每个华夫饼悖论你也需要确保它关闭。但通常你会在你的应用程序关闭时将其关闭。
答案 1 :(得分:1)
在使用system.awaitTermination()
返回之前使用true
。