J'utilise akka depuis quelque temps. J'ai commencé à voir des modèles dans mon code pour résoudre la réponse tardive pour async io. Cette implémentation est-elle correcte? Il y a une autre façon de faire une réponse tardive sans blocage?Réponse tardive d'async io dans Akka
class ApplicationApi(asyncIo : ActorRef) extends Actor {
// store senders to late reply
val waiting = Map[request, ActorRef]()
def receive = {
// an actore request for a user, store it to late reply and ask for asyncIo actor to do the real job
case request : GetUser =>
waiting += (sender -> request)
asyncIo ! AsyncGet("http://app/user/" + request.userId)
// asyncio response, parse and reply
case response : AsyncResponse =>
val user = parseUser(response.body)
waiting.remove(response.request) match {
case Some(actor) => actor ! GetUserResponse(user)
}
}
}
Je pense que vous avez raison; J'ai oublié que 'sender' est une propriété mutable de l'acteur et pas seulement une variable qui peut être fermée. –
que l'extracteur infixe est vraiment intéressant – sourcedelica