Das asynchrone Muster scheint asynchron zu sein, dann gibt die Steuerung nach await
ein Ergebnis, was sehr sinnvoll ist.Wie erwartet man eine WebClient.UploadStringAsync-Anfrage?
jedoch die WebClient
Klasse UploadStringAsync
Methode liefert keine Task
, es stattdessen void zurückgeben und so nicht await
ziert werden kann. Stattdessen kann ein Event-Handler definiert werden. z.B.
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);
}
}
Allerdings wartet dies nicht auf eine Antwort und stattdessen rasselt schnell durch die maximale Anzahl der Web-Anfragen.
Gibt es eine Möglichkeit, außerhalb von FlushQueue
zurückzufließen, bis der Rückruf des Ereignishandlers ausgeführt wird?
Edit: Dies ist für ein Windows Phone 7.5 Projekt.
Danke, das ist großartig, schaute auf die Dokumente für 'UploadStringTaskAsyc' und es gibt die 'Server-Antwort' als eine Zeichenfolge, aber nicht sagen, was ist das Format der Zeichenfolge - Ich brauche den HTTP-Antwortcode z. 200, muss ich diese Zeichenfolge analysieren? – Brendan
Ist HttpClient jetzt auch der bevorzugte Weg, um so etwas zu tun? Dies ist der erste, den ich davon gehört habe ... Die Suche nach 'POST-Daten von Windows Phone' hat zu WebClient, HttpWebRequest und anderen, aber nicht zu HttpClient, z. [dieser MSDN-Artikel] (http://msdn.microsoft.com/en-us/library/ff637320 (v = vs.95) .aspx # nicht unterstützt) und [dieser MSDN-Artikel] (http://msdn.microsoft.com). com/de-de/library/debx8sh9 (v = vs.90) .aspx). Gibt es eine gute Quelle, um die aktuell besten Praktiken zu finden? – Brendan
Soweit ich weiß, ist 'HttpClient' auf Windows Phone als NuGet-Paket verfügbar, befindet sich aber immer noch in der Beta-Version. Also würde ich es nicht "bevorzugten Weg" nennen, sondern "bevorzugten Weg";) Für weitere Informationen: http://blogs.msdn.com/b/bclteam/archive/2013/02/18/portable-httpclient -for-net-framework-and-windows-phone.aspx –