Windows Phone 8异步等待使用
本文关键字:等待 异步 Phone Windows | 更新日期: 2023-09-27 18:18:20
我刚刚开始学习WP编程,所以这个问题可能有点傻…
我正在开发从一个web服务中获取数据的应用程序,几种不同的方法。所以我决定把所有这些web服务获取代码放到一个类中:
class WebApiWorker
{
public async Task<List<GeocodeResponse>> 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<GeocodeResponse>>(data);
return geocodeResponse;
}
}
但是我应该如何从我的"主应用程序"代码调用它,我尝试这样做:
WebApiWorker webApi = new WebApiWorker();
var geoResponse = await webApi.GetGeocodeAsync("address");
那么这有什么问题,我得到编译器错误:'await'操作符只能在async方法中使用。考虑使用'async'修饰符标记此方法,并将其返回类型更改为'Task'。
欢迎大家提出建议
确保你的"main app"代码中的方法也有"async"修饰符:
public async Task GetAddress()
{
WebApiWorker webApi = new WebApiWorker();
var geoResponse = await webApi.GetGeocodeAsync("address");
}
这个问题的答案稍微取决于您想从响应中得到什么。你要马上使用结果吗?如果是这样,那么您根本就没有真正使用异步功能,而可以创建同步函数的另一个版本。如果你的调用函数打算稍后继续,那么按照Chris(和你的编译器)说的做;使调用函数异步
这是真的,最终,根调用者将需要不是异步的;一般来说,那将是一个不返回任何东西的void方法。(事实上,上面所说的void会在异步函数返回之前返回)