Как я могу преобразовать эту реализацию Task.WhenAll () в Parallel.ForEach ()? - PullRequest
0 голосов
/ 03 июля 2018

У меня есть код ниже, который проверяет авторизацию группы пользователей для разных доменов. Код проверяет авторизацию, используя различную комбинацию доменов:

//build domain combos for lookup
var domainCombos = new List<Tuple<string, string>>();
domainCombos.Add(new Tuple<string, string>("corp-domain-1", "corp-domain-1"));
domainCombos.Add(new Tuple<string, string>("corp-domain-1", "corp-domain-2"));
domainCombos.Add(new Tuple<string, string>("corp-domain-2", "corp-domain-2"));
domainCombos.Add(new Tuple<string, string>("corp-domain-2", "corp-domain-1"));

var results = await Task.WhenAll(domainCombos.Select(domainCombo =>
{
    request.GroupDomainName = domainCombo.Item1;
    request.UserDomainName = domainCombo.Item2;
    return GetSingleAuthorizedGroupInfo(request);
}));
var aggregateResults = results.Where(x => x != null).SelectMany(result => result).ToList();
return aggregateResults;

Я думаю, что эта подпрограмма является хорошим кандидатом на Parallel.ForEach b / c, нет никаких взаимозависимостей между вызовами GetSingleAuthorizedGroupInfo ().

Кроме того, когда я выполняю с 1 domainCombo, ответ возвращается через 800 мс, тогда как когда я выполняю с 4 domainCombos, ответ возвращается примерно через 1800 мс. Как мне перейти к приведенному выше коду для использования Parallel.ForEach?

...