Wydaje się, że asynchroniczny wzorzec to wywołanie asynchroniczne, a następnie kontrola zysku po await
wyniku, co ma wiele sensu.Jak "czekać" na żądanie WebClient.UploadStringAsync?
Jednak WebClient
klasa UploadStringAsync
metoda nie zwraca Task
, zamiast tego powrócić unieważnione, a więc nie może być await
ed. Zamiast tego można zdefiniować procedurę obsługi zdarzeń. na przykład
public async Task FlushQueue() {
attempt = 0;
WebClient wc = new WebClient();
while ((queue.Count > 0) && (attempt < ALLOWED_ATTEMPTS)) {
// Copy 10 items from queue and put into buffer ...
...
wc.UploadStringCompleted += (s, e) => {
// if response 200
// Remove 10 sent items from queue
// else attempt++
};
wc.UploadStringAsync("http://example.com/blah", "POST", buffer);
// In an ideal world we could call UploadStringAsync like,
// var response = await wc.UploadStringAsync("http://example.com/blah", "POST", buffer);
}
}
Jednak nie czeka na odpowiedź i zamiast tego szybko uruchamia maksymalną liczbę żądań internetowych.
Czy istnieje sposób na uzyskanie zwrotu z powrotem poza FlushQueue
do czasu wykonania wywołania zwrotnego procedury obsługi zdarzenia?
Edytuj: To jest dla projektu Windows Phone 7.5.
Dzięki, to świetnie, obejrzeliśmy dokumenty dla "UploadStringTaskAsyc" i zwrócono "odpowiedź serwera" jako ciąg znaków, ale nie podano, jaki jest format ciągu - potrzebuję kodu repons HTTP, np. 200, czy muszę przeanalizować ten ciąg? – Brendan
Czy teraz HttpClient jest preferowanym sposobem robienia tego typu rzeczy? Jest to pierwsze, o którym słyszałem ... Wyszukiwanie danych POST z Windows Phone zaowocowało WebClient, HttpWebRequest i innymi, ale nie HttpClient np. [ten artykuł MSDN] (http://msdn.microsoft.com/en-us/library/ff637320 (v = vs.95) .aspx # unsupported) i [ten artykuł MSDN] (http://msdn.microsoft. com/en-us/library/debx8sh9 (v = vs.90) .aspx). Czy istnieje dobre źródło informacji na temat najlepszych aktualnie przyjętych praktyk? – Brendan
O ile mi wiadomo, 'HttpClient' na Windows Phone jest dostępny jako pakiet NuGet, ale nadal jest w wersji beta. Nie nazwałbym tego "preferowanym sposobem", ale "preferowanym sposobem";) Aby uzyskać więcej informacji: http://blogs.msdn.com/b/bclteam/archive/2013/02/18/portable-httpclient -for-net-framework-and-windows-phone.aspx –