有没有办法在Windows Phone 8中等待IAsyncResult?

如何在Windows Phone 8中使用等待 HttpWebRequest?

有没有办法让IAsyncResult的东西与await一起工作?

private async Task GetCurrentTemperature() { GeoCoordinate location = GetLocation(); string url = "http://free.worldweatheronline.com/feed/weather.ashx?q="; url += location.Latitude.ToString(); url += ","; url += location.Longitude.ToString(); url += "&format=json&num_of_days=1&key=MYKEY"; HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); webRequest.Method = "POST"; webRequest.BeginGetResponse(new AsyncCallback(OnGotWebRequest), webRequest); } private void OnGotWebRequest(IAsyncResult asyncResult) { HttpWebRequest webRequest = (HttpWebRequest)asyncResult.AsyncState; var httpResponse = (HttpWebResponse)webRequest.EndGetResponse(asyncResult); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { string responseText = streamReader.ReadToEnd(); } } 

谢谢!

使用TaskFactory.FromAsyncBeginGetRequestStream / EndGetRequestStream方法创建Task 。 然后你可以完全摆脱你的OnGotWebRequest ,并为响应做同样的事情。

请注意,当BeginGetRequestStream调用完成时,您正在调用EndGetResponse ,这不适合开始 – 您必须调用EndFoo方法来匹配您最初调用的BeginFoo 。 你的意思是打电话给BeginGetResponse吗?

如果安装Microsoft.Bcl.Async包,则会获得一些async扩展方法,包括HttpWebRequest