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

标签 c# asynchronous windows-phone windows-phone-8

如何在 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完全,并对响应做同样的事情。

请注意,当前您正在调用 EndGetResponseBeginGetRequestStream调用完成,开始是不合适的 - 你必须调用 EndFoo匹配 BeginFoo 的方法你最初打电话。你是不是想调用BeginGetResponse

关于c# - 有没有办法在 Windows Phone 8 中等待 IAsyncResult?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13733749/

相关文章:

c# - 澄清两列同名

c# - 模态对话框弹出后开始漫长的过程

c# - 长日期时间转换为日期时间 C#

javascript - 等到异步操作 (firebase) 调用完成后再加载页面

windows-phone - 在 Windows Phone 8 上创建构建

c# - 用于分割字符串的高级正则表达式

javascript 变量范围 - 我该如何解决这个问题?

node.js - 通过静态函数的异步构造函数,但await不起作用

c# - 持有并获取ListView Item索引

windows-phone-7 - 按电话号码搜索联系人,使用 3 位前缀过滤