【发布时间】:2014-07-05 00:07:12
【问题描述】:
我正在处理一个文本文件,其中包含Parallel.ForEach 中的员工及其家属。无法保证文件中的顺序。在每次迭代中,我都会创建一个员工或依赖对象。员工对象被添加到ConcurrentDictionary。家属是员工的财产,需要与员工相关联。问题是如果员工不在字典中,当我尝试添加受抚养人时,永远不会添加受抚养人。我可以缓存这些“孤立的”依赖项并在 ForEach 完成时添加它们,但我认为有更好的方法。
有什么方法可以在我的Parallel.ForEach 中等待/旋转/加入,直到添加员工,然后添加受抚养人。我不赞成这个解决方案,所以欢迎使用替代方案。
这是我的代码(为简洁而编辑):
var cx = System.IO.File.ReadLines(path);
var _employeeDictionary = new ConcurrentDictionary<string, Employee>();
Parallel.ForEach(cx, _options, line =>
{
Employee employee = null;
switch (line.Substring(0, 2))
{
case EmployeeLine:
// Employee is created and added to dictionary....
_employeeDictionary.GetOrAdd(winID, employee);
break;
case DependentLine:
// Dependent is created
// WILL NOT BE ADDED IF THE EMPLOYEE HASN'T BEED ADDED YET
if (_employeeDictionary.TryGetValue(dependent.EmpID, out employee))
{
lock (locker)
{
employee.AddDependent(ci, dependent);
}
}
break;
}
});
【问题讨论】:
标签: c# parallel-processing task-parallel-library