Использование 'AsParallel ()' / 'Parallel.ForEach ()'?

Нужен небольшой совет по использованию AsParallel () или Parallel.ForEach () , чтобы ускорить это.

См. Метод, который у меня есть (упрощенный / измененный для этого примера) ниже.

Требуется список вроде "US, FR, APAC", где "APAC" - это псевдоним, возможно, для 50 других "US, FR , JP, IT, GB "и т. Д. Метод должен взять" US, FR, APAC "и преобразовать его в список" US "," FR ", плюс все страны, которые находятся в" APAC ".

private IEnumerable<string> Countries (string[] countriesAndAliases)
{
    var countries = new List<string>();

    foreach (var countryOrAlias in countriesAndAliases)
    {
        if (IsCountryNotAlias(countryOrAlias))
        {
            countries.Add(countryOrAlias);
        }
        else 
        {
            foreach (var aliasCountry in AliasCountryLists[countryOrAlias]) 
            {
                countries.Add(aliasCountry);
            }
        }
    }

    return countries.Distinct();
}

Сделать это распараллеливанием так же просто, как изменить его на то, что ниже? Есть ли больше нюансов в использовании AsParallel () , чем этот? Следует ли использовать Parallel.ForEach () вместо foreach ? Какие практические правила мне следует использовать при распараллеливании циклов foreach ?

private IEnumerable<string> Countries (string[] countriesAndAliases)
{
    var countries = new List<string>();

    foreach (var countryOrAlias in countriesAndAliases.AsParallel())
    {
        if (IsCountryNotAlias(countryOrAlias))
        {
            countries.Add(countryOrAlias);
        }
        else 
        {
            foreach (var aliasCountry in AliasCountryLists[countryOrAlias].AsParallel()) 
            {
                countries.Add(aliasCountry);
            }
        }
    }

    return countries.Distinct();
}
43
задан Marc.2377 1 October 2019 в 21:30
поделиться