有没有办法在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.FromAsync
从BeginGetRequestStream
/ EndGetRequestStream
方法创建Task
。 然后你可以完全摆脱你的OnGotWebRequest
,并为响应做同样的事情。
请注意,当BeginGetRequestStream
调用完成时,您正在调用EndGetResponse
,这不适合开始 – 您必须调用EndFoo
方法来匹配您最初调用的BeginFoo
。 你的意思是打电话给BeginGetResponse
吗?
如果安装Microsoft.Bcl.Async包,则会获得一些async
扩展方法,包括HttpWebRequest
。