Kev*_*ith 1 c# parallel-processing
在下文中foreach p : allPersons,很明显(因为逻辑是顺序的)map/Dictionary可用于缓存/ memoization.
Dictionary<string, int> personNameToIdMap = new Dictionary<string, int>();
foreach(p : allPersons)
{
int outputId;
if(personNameToIdMap.TryGetValue(p.Name, out outputId))
{
// nothing to do since map contained the p.Name
}
else
{
outputId = doExpensiveLookup(p.Name);
personNameToIdMap[p.Name] = outputId;
}
...
p.Id = outputId;
}
Run Code Online (Sandbox Code Playgroud)
如果我替换上面foreach用Parallel.ForEach,将每个线程的份额personNameToIdMap?
是的,如果Parallel.Foreach每个线程都使用相同的实例Dictionary.
如果你真的想要并行,你可以使用ConcurrentDictionary,它是线程安全的版本Dictionary