有没有一种方法可以配置此Task.WhenAll选择带有匿名方法?

时间:2018-06-25 21:47:40

标签: c# .net

以下代码获取所有域,然后获取每个域的所有用户:

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属性。有没有办法像上面的代码一样作为匿名方法来做到这一点?上面的代码中使用的方法无法编译,但我只是想提供一个我要尝试做的事情。

2 个答案:

答案 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();