Từ ứng dụng khách, tôi gửi yêu cầu/giao dịch (có chứa thao tác để thực hiện (và tham số) + transactionID) đến hàng đợi từ xa. Máy chủ từ xa dequeue yêu cầu tại một số điểm và mất một thời gian để xử lý nó.Cần thiết kế tốt hơn cho thành phần "điều phối gọi lại"
Sau khi xử lý xong, nó sẽ gửi một phản hồi trên hàng đợi của khách hàng (chứa phản hồi ứng dụng + transactionID) ... vì vậy đây là chế độ liên lạc "ngắt kết nối" hoàn toàn, cách duy nhất mà khách hàng có thể ánh xạ phản hồi cho yêu cầu là thông qua transactionID.
Phản hồi thư được giải trừ ở phía máy khách và khớp với yêu cầu ban đầu (dựa trên transactionID).
Điều tôi đang làm ngay bây giờ là khi khách hàng đăng yêu cầu lên hàng đợi của máy chủ, nó sẽ thêm một cuộc gọi lại đến một transactionId lưu giữ và cuộc gọi lại (ủy nhiệm) dictionnary. Đây là Dictionary<int, object>
ánh xạ một transactionId trở lại cuộc gọi lại để gọi với kết quả của thao tác.
Gọi lại/đại biểu được lưu trữ dưới dạng đối tượng do thực tế tùy theo yêu cầu, chữ ký đại biểu gọi lại khác nhau (ví dụ: phản hồi có thể trả về List<string>
trong khi phản hồi khác có thể trả về int
).
Khi hàng đợi của khách hàng dequeues một phản ứng, nó biết loại phản ứng (và do đó chữ ký tương ứng của gọi lại), do đó nó được gọi lại từ điển, dựa trên transactionID. Sau đó nó đưa đối tượng trở lại kiểu ủy nhiệm tương ứng và gọi lại cuộc gọi lại.
Tôi thấy cách tiếp cận này không phải là rất "sexy" nhưng tôi không thực sự thấy một cách khác để thực hiện một nhiệm vụ như vậy.
Có cách nào tốt hơn để thực hiện việc này không?
Nếu vấn đề không rõ ràng, vui lòng cho tôi biết và sẽ làm rõ với một số chỉnh sửa.
bản sao có thể có của [C#: Sử dụng Random và OrderBy là một thuật toán shuffle tốt?] (Http://stackoverflow.com/questions/1287567/c-is-using-random-and-orderby-a-good-shuffle -algorithm) – Arion