Wes*_*ley 0 c# async-await asp.net-web-api
我有多种async方法从不同的基于OAuth的REST Api调用返回相同的类型.
如果我直接打电话给我,我可以收回数据:
//Call a specific provider
public async Task<List<Contacts>> Get()
{
return await Providers.SpecificProvider.GetContacts();
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试遍历多个帐户,则对象将在AWAIT完成之前返回:
//Call all providers
public async Task<List<Contacts>> Get()
{
return await Providers.GetContactsFromAllProviders();
}
public async Task<List<Contacts>> GetContactsFromAllProviders()
{
var returnList = new List<Contacts>();
//Providers inherits from List<>, so it can be enumerated to trigger
//all objects in the collection
foreach (var provider in Providers)
{
var con = await provider.GetContacts();
returnList.Add(con);
}
return returnList;
}
Run Code Online (Sandbox Code Playgroud)
我是新手,async可能会遗漏一些简单的东西
您提供的代码将以串行方式逐个为每个提供商调用Web服务.在AWAIT完成之前,我没有看到对象返回的语句是如何返回的,因为在循环内部GetContacts等待调用.
但是,不是串行调用提供程序,而是可以并行调用它们,这在大多数情况下应该减少执行时间:
var tasks = providers.Select(provider => provider.GetContacts());
// Tasks execute in parallel - wait for them all to complete.
var result = await Task.WhenAll(tasks);
// Combine the returned lists into a single list.
var returnList = result.SelectMany(contacts => contacts).ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
954 次 |
| 最近记录: |