Uso akka por algún tiempo. Empecé a ver algunos patrones en mi código para resolver la respuesta tardía para async io. ¿Está bien esta implementación? ¿Hay otra forma de hacer una respuesta tardía sin bloque?Última respuesta de async io en 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)
}
}
}
Creo que tiene razón; Olvidé que 'sender' es una propiedad mutable del Actor y no solo una variable que se puede cerrar. –
ese extractor de infijo es realmente interesante – sourcedelica