如何正确地从Parallel ForEach或For循环中返回值?
例如,以下代码是否正确/线程安全?
{
Process[] processes = Process.GetProcesses();
String ProcessName = String.Empty;
Parallel.ForEach(processes, curItem => {
if (curItem.Handle == this._handle) {
ProcessName = curItem.ProcessName;
return;
}
});
return ProcessName;
}
这个还是那个?
或者这个?
{
Process[] processes = Process.GetProcesses();
List<String> ProcessNames = new List<String>();
Parallel.ForEach(processes, curItem => {
ProcessNames.Add(processes.ProcessName);
}
});
return ProcessNames;
}
最后,在Parallel For或ForEach循环中,return关键字的行为是什么?是否会立即终止所有线程?它会导致任何意外的副作用吗?希望我的问题表述清楚了。请注意,第一个例子中修改的String是线程安全的,并且包含我期望的值吗?在第二个例子中,我的List Collection修改是线程安全的吗?所有我期望添加的值都会被添加吗?请留意HTML标签。