Windows Phone 8异步等待使用

我刚刚开始学习WP编程,所以这可能是一个愚蠢的问题……

我开发的应用程序从一个Web服务获取数据几个不同的方法。 所以我决定将所有这些Web服务提取代码放到一个类中:

class WebApiWorker { public async Task<List> GetGeocodeAsync(String address) { String url = "http://api.com&search=" + HttpUtility.UrlEncode(address) + "&format=json"; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.Method = "GET"; HttpWebResponse response = (HttpWebResponse) await httpWebRequest.GetResponseAsync(); Stream responseStream = response.GetResponseStream(); string data; using (var reader = new System.IO.StreamReader(responseStream)) { data = reader.ReadToEnd(); } responseStream.Close(); var geocodeResponse = JsonConvert.DeserializeObject<List>(data); return geocodeResponse; } } 

但我应该如何从我的“主应用”代码中调用它,我尝试这样的事情:

 WebApiWorker webApi = new WebApiWorker(); var geoResponse = await webApi.GetGeocodeAsync("address"); 

所以这有什么不对,我得到编译错误:’await’运算符只能在异步方法中使用。 考虑使用’async’修饰符标记此方法并将其返回类型更改为’Task’。

欢迎所有建议。

确保“主应用”代码中的方法也具有“async”修饰符:

 public async Task GetAddress() { WebApiWorker webApi = new WebApiWorker(); var geoResponse = await webApi.GetGeocodeAsync("address"); } 

这个问题的答案稍微取决于您对响应的要求。 你打算立即使用结果吗? 如果是这样,那么你根本就不会真正使用异步function,而只能创建同步的另一个版本的函数。 如果你的调用函数要在以后继续,那么就像Chris(和你的编译器)所说的那样; 使调用函数异步。

确实,最终,根调用者需要不是异步; 通常,那个将是一个不返回任何东西的void方法。 (实际上,在异步函数执行之前,void会返回)