Нужен небольшой совет по использованию 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();
}