如何在 Windows Phone 8 中使用 await 和 HttpWebRequest?
有没有办法让 IAsyncResult 与 await 一起工作?
private async Task<int> 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
创建一个 Task<Stream>
来自 BeginGetRequestStream
/EndGetRequestStream
方法。然后你可以摆脱你的 OnGotWebRequest
完全,并对响应做同样的事情。
请注意,当前您正在调用 EndGetResponse
当 BeginGetRequestStream
调用完成,开始是不合适的 - 你必须调用 EndFoo
匹配 BeginFoo
的方法你最初打电话。你是不是想调用BeginGetResponse
?
关于c# - 有没有办法在 Windows Phone 8 中等待 IAsyncResult?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13733749/