假设我有这个代码调用服务并返回任务:
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
?
答案 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 Pattern,GetList
应该有一个Async
后缀,这会向开发人员提示它应该await
编辑:
var myList = new List<String>();
myList = await GetListAsync();
当然,创建一个新列表只是为了扔掉它是愚蠢的:
var myList = await GetListAsync();