方法返回一个任务,如何获得返回值?

时间:2015-01-19 20:38:37

标签: c# asynchronous

假设我有这个代码调用服务并返回任务:

 public async Task<List<string>> GetList()
        {

            client.BaseAddress = new Uri("http://localhost9999/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage response = await client.GetAsync("api/listofstrings");

                var json = response.Content.ReadAsStringAsync().Result;
                var myStr = JsonConvert.DeserializeObject<List<string>>(json);
                var list = new List<string>(myStr);


            return list;
        }

如果这个methpd只返回了一个字符串列表,我可以这样做:

var myList = new List<String>();
myList = GetList()

如何在任务中获得类似的结果?我想错了吗?当然,我应该能够将方法的结果(字符串列表)分配给myList

2 个答案:

答案 0 :(得分:3)

您需要使用await来获取async方法的结果:

var myList = await GetList();

要使用await,您调用GetList的方法也应该是async。如果不是,您可以使用.Result属性,但这会阻止执行:

var myList = GetList().Result;

答案 1 :(得分:1)

await,就像这样:

var myList = new List<String>();
myList = await GetList();

请注意,根据Task-based Asynchronous PatternGetList应该有一个Async后缀,这会向开发人员提示它应该await编辑:

var myList = new List<String>();
myList = await GetListAsync();

当然,创建一个新列表只是为了扔掉它是愚蠢的:

var myList = await GetListAsync();