首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows Phone 8异步等待使用率

Windows Phone 8异步等待使用率
EN

Stack Overflow用户
提问于 2013-06-13 23:17:27
回答 2查看 7.5K关注 0票数 4

我刚刚开始学习可湿性粉剂编程,所以这可能是一个小愚蠢的问题…

我正在开发的应用程序,从一个网络服务获取数据的几个不同的方法。因此,我决定将所有这些web服务获取代码放在一个类中:

代码语言:javascript
复制
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;

    }
}

但是我应该如何从我的“主应用程序”代码中调用它,我尝试了如下所示:

代码语言:javascript
复制
WebApiWorker webApi = new WebApiWorker();
var geoResponse = await webApi.GetGeocodeAsync("address");

那么这有什么问题呢,我得到了编译器错误:'await‘操作符只能在异步方法中使用。请考虑使用“async”修饰符标记此方法,并将其返回类型更改为“Task”。

欢迎所有的建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-14 02:03:30

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

代码语言:javascript
复制
public async Task GetAddress()
{
    WebApiWorker webApi = new WebApiWorker();
    var geoResponse = await webApi.GetGeocodeAsync("address");
}
票数 4
EN

Stack Overflow用户

发布于 2013-06-14 02:06:38

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

的确,根调用者最终不需要是异步的;通常情况下,它将是一个不返回任何内容的void方法。(实际上,上述void将在异步函数之前返回)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17090823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档