方法return一个任务,如何得到return-value?
Method return a task, how get the return-value?
假设我有调用服务和 returns 任务的代码:
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
?
你await
吧,像这样:
var myList = new List<String>();
myList = await GetList();
请注意,根据 Task-based Asynchronous Pattern,GetList
应该有一个 Async
后缀,这提示开发人员应该 await
ed:
var myList = new List<String>();
myList = await GetListAsync();
当然,创建一个新列表只是为了丢弃它是愚蠢的:
var myList = await GetListAsync();
您需要使用 await
来获取 async
方法的结果:
var myList = await GetList();
要使用 await
你调用 GetList
的方法应该是 async
too.If 不是你可以使用 .Result
属性 ,但这会阻止执行:
var myList = GetList().Result;
假设我有调用服务和 returns 任务的代码:
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
?
你await
吧,像这样:
var myList = new List<String>();
myList = await GetList();
请注意,根据 Task-based Asynchronous Pattern,GetList
应该有一个 Async
后缀,这提示开发人员应该 await
ed:
var myList = new List<String>();
myList = await GetListAsync();
当然,创建一个新列表只是为了丢弃它是愚蠢的:
var myList = await GetListAsync();
您需要使用 await
来获取 async
方法的结果:
var myList = await GetList();
要使用 await
你调用 GetList
的方法应该是 async
too.If 不是你可以使用 .Result
属性 ,但这会阻止执行:
var myList = GetList().Result;