以下代码获取所有域,然后获取每个域的所有用户:
var domainNames = new string[]{ "corp-domain-1", "corp-domain-2"};
var results = await Task.WhenAll(domainNames.Select(x =>
{
request.DomainName = x;
GetUsersPerDomainAsync(request);
}));
if (results.First() == null) return null;
return results.SelectMany(result => result).ToList();
目标是为每个域在请求上更新DomainName属性。有没有办法像上面的代码一样作为匿名方法来做到这一点?上面的代码中使用的方法无法编译,但我只是想提供一个我要尝试做的事情。
答案 0 :(得分:1)
您必须返回任务。在@elgonzo's advise之后,我想您的代码应如下所示:
...
await Task.WhenAll(
domainNames.Select(x => Task.Factory.StartNew(async () =>
await GetUsersPerDomainAsync(new Request() { DomainName = x }) )
)
);
...
我不相信一旦results
的收益只是一个WhenAll
,您就可以等待返回Task
。但是我认为主要的想法是我建议了。
Take a look at this code working on dotnetfiddle。
希望对您有帮助。
答案 1 :(得分:0)
您需要在Select
方法中从委托返回一些内容,因此您的代码可能如下所示:
var domainNames = new string[] { "corp-domain-1", "corp-domain-2" };
var results = await Task.WhenAll(domainNames.Select(x =>
{
request.DomainName = x;
return GetUsersPerDomainAsync(request);
}));
if (results.First() == null) return null;
return results.SelectMany(result => result).ToList();