從Parallel ForEach或For循環返回值的正確方法是什麼?Parallel ForEach或For循環中的返回值和關鍵字
例如下面的代碼是正確的/ threadsafe?
{
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;
}
最後什麼回報關鍵字的並行For或ForEach循環內的行爲?
IE:它是否立即終止所有線程?它會導致你可能不期望的任何文物?
希望我所問的是有道理的。 PS:更具體一點。看看第一個例子是我對String線程安全的修改,並且包含我期望的值,因爲返回語句?在第二個例子中,我修改了List Collection線程安全嗎?我期望添加的所有值都會被添加嗎?
我只是在玩這個概念。我認爲它可能不會。 – 2011-03-29 14:06:15
只是我嗎?上面的代碼會引發以下錯誤:Win32Exception被用戶代碼無法處理。訪問被拒絕 - 我猜它與比較句柄有關? – 2011-03-29 14:44:08
不是在我的情況,我有我自己的自定義窗口類。它實現了過程對象不提供的功能。我只是想避免另一個API調用並且玩弄這個概念。看起來它在標準循環中也不起作用。哎呦! – 2011-03-29 15:02:42