Tôi đang chuyển một số mã từ khung .NET đầy đủ sang phiên bản WP7 và tôi đang gặp sự cố với các cuộc gọi đồng bộ hóa với async.Thực hiện các cuộc gọi đồng bộ trong Silverlight WP7
string response;
string requestString = GenerateReqString();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create("endpoint");
req.Method = "POST";
req.ContentType = "text/xml";
req.ContentLength = requestString.Length;
StreamWriter sw = new StreamWriter (req.GetRequestStream(), System.Text.Encoding.ASCII);
sw.Write(requestString);
sw.Close();
StreamReader sr = new StreamReader(req.GetResponse().GetResponseStream());
response = sr.ReadToEnd();
sr.Close();
Chuỗi phản hồi sau đó được phân tích thành danh sách đối tượng được trả về bởi phương pháp.
Sự cố tôi gặp phải là không có cách nào để thực hiện cuộc gọi đồng bộ trong Silverlight/WP7. Nếu tôi sử dụng một cuộc gọi trở lại, tôi sẽ nhận được phản hồi trong một hàm khác và sẽ không thể trả về nó từ hàm ban đầu. Có cách nào để thực hiện cuộc gọi một cách đồng bộ hoặc trả về từ chức năng CallBack trở lại phương thức đã khởi động cuộc gọi không đồng bộ không?
Cho phép nói ProcessWebResponseResult() tạo đối tượng từ chuỗi và hàm gọi hàm DoSomethingAsync() cần trả về đối tượng đó. Điều đó có thể không? – CACuzcatlan
Đó là thiếu điểm. Phương thức gọi DoSomethingAsync chuyển một hàm đến DoSomethingAsync. Hàm được truyền là "phải làm gì với kết quả của hàm này". Khi bạn cần nhiều hơn, bạn thêm các chức năng tiếp tục bổ sung vào chuỗi cuộc gọi của mình. –
Đây là cách bạn nghĩ về một chương trình thường chạy: 'A(); B(); C();'. Tuy nhiên, khi bạn thực hiện với 'kiểu chuyển tiếp liên tục', bạn sẽ cho mỗi hàm biết phải làm gì khi hoàn thành. Thay vì "Tôi nhận được kết quả của tôi từ chức năng này", bạn nói "Tôi nói chức năng này phải làm gì với kết quả của nó" thông qua một đại biểu. –