【发布时间】:2011-03-29 14:01:35
【问题描述】:
从并行 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 关键字的行为是什么?
IE:它会立即终止所有线程吗?它会导致您可能没有预料到的任何伪影吗?
希望我的问题是有道理的。
PS:更具体一点。查看第一个示例是我对 String 线程安全的修改并包含我期望的值,因为 return 语句?在第二个示例中是我对 List Collection 线程安全的修改?会添加我期望的所有值吗?
【问题讨论】:
标签: c# multithreading thread-safety parallel-processing task-parallel-library