Каков правильный способ вернуть значение из цикла 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;
}
И, наконец, какой поведение ключевого слова return внутри цикла Parallel For или ForEach?
IE: Он немедленно завершает все потоки? Не вызовет ли это каких-либо артефактов, которых вы не ожидали?
Надеюсь, то, что я спрашиваю, имеет смысл.
PS: Чтобы быть более конкретным. В первом примере моя модификация String threadsafe содержит значение, которое я ожидаю из-за оператора return? А во втором примере - безопасна ли моя модификация List Collection? Будут ли добавлены все ожидаемые значения?