5
異步模式似乎被稱爲異步,然後在產生控制後產生控制,這很有意義。如何'等待'WebClient.UploadStringAsync請求?
但WebClient
類UploadStringAsync
方法不返回Task
,而是它返回void,所以不能await
ed。相反,可以定義一個事件處理程序。例如
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);
}
}
但是,這並不等待響應,而是通過激發最大數量的Web請求來快速響應。
有沒有一種方法可以在FlushQueue
之外回退流程,直到執行事件處理程序回調?
編輯:這是爲Windows Phone 7.5項目。
感謝,很棒,查看'UploadStringTaskAsyc'的文檔,它以字符串形式返回'服務器響應',但沒有說明字符串的格式是什麼 - 我需要HTTP repsonse代碼。 200,我是否需要解析該字符串? – Brendan 2013-05-03 12:20:26
也是HttpClient現在做這種事情的首選方式?這是我聽說過的第一個...在Windows Phone上搜索'POST數據'導致WebClient,HttpWebRequest和其他人,但不是HttpClient,例如[此MSDN文章](http://msdn.microsoft.com/en-us/library/ff637320(v = vs.95).aspx#不支持)和[本MSDN文章](http://msdn.microsoft.com/zh-cn/ COM/EN-US /庫/ debx8sh9(v = VS.90)的.aspx)。是否有一個很好的資源來找出當前最好的被接受的做法? – Brendan 2013-05-03 12:25:41
據我所知,Windows Phone上的'HttpClient'可作爲NuGet包使用,但仍處於測試版。所以我不會把它稱爲「首選方式」,但「首選的方式是」;)更多信息:http://blogs.msdn.com/b/bclteam/archive/2013/02/18/portable-httpclient -for-net-framework-and-windows-phone.aspx – 2013-05-03 12:54:52