Tôi đang sử dụng akka một thời gian. Tôi bắt đầu thấy một số mẫu trong mã của tôi để giải quyết trả lời trễ cho async io. Việc triển khai này có ổn không? Có một cách khác để trả lời muộn mà không có khối?Trả lời trễ từ async io ở 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)
}
}
}
Tôi nghĩ bạn là chính xác; Tôi quên rằng 'người gửi' là một tài sản có thể thay đổi của diễn viên và không chỉ là một biến có thể được đóng lại. –
rằng bộ giải nén vô tận thực sự thú vị – sourcedelica