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'。

欢迎大家提出建议

Windows Phone 8异步等待使用

确保你的"main app"代码中的方法也有"async"修饰符:

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

这个问题的答案稍微取决于您想从响应中得到什么。你要马上使用结果吗?如果是这样,那么您根本就没有真正使用异步功能,而可以创建同步函数的另一个版本。如果你的调用函数打算稍后继续,那么按照Chris(和你的编译器)说的做;使调用函数异步

这是真的,最终,根调用者将需要不是异步的;一般来说,那将是一个不返回任何东西的void方法。(事实上,上面所说的void会在异步函数返回之前返回)