我正在尝试在akka中使用ask模式。据我所知documentation:
ask操作涉及创建一个内部actor来处理 此回复,需要超时才能销毁 为了不泄漏资源;请参阅下文。
问题是我希望在未来成功完成后回复发件人:
trait Command
trait Status
case class SetStatus(c: Command, st: Status)+
sealed trait StatusChangeResponse
object Ok extends StatusChangeResponse
//...
override def receive: Receive = {
case c : Command => {
val f = sender ? SetStatus(c, Run) map(v => v.asInstanceOf[StatusChangeResponse])
f.onComplete{
case Success(Ok) =>
c()
sender ! SetStatus(c, Finished) // <---- Here
}
}
}
问题是我不太明白是否可以这样做。如文档中所指定,它在另一个actor中执行。所以sender
可能不是我所期望的。
这样做可以吗?