У меня возникают проблемы с получением правильного синтаксиса для обеспечения того, чтобы мои переменные, которые совместно используются несколькими потоками, не мешают друг другу, но остаются локальными в потоке.C# Parallel.ForEach Синтаксис общих переменных
Я повторяю через datatable для определения нескольких переменных. Каждый поток будет полагаться на свой собственный набор нижеперечисленных переменных. Очевидно, что этот код перезаписывает переменный, когда начинается каждый поток:
Parallel.ForEach(iterate.AsEnumerable(), drow =>
//foreach (DataRow drow in iterate.Rows)
{
//Set Variables
string insertDeliniator = "/"; //extra needed to build URI
string insertInterplay = "interplay://"; //extra info needed to build URI
InterplaySetup.InterplayEngineHostname = drow["Interplay_Engine_Hostname"].ToString();
InterplaySetup.InterplayWatchFolder = insertInterplay + drow["Interplay_Engine_Hostname"].ToString() + insertDeliniator + drow["Interplay_Watch_Folder"].ToString();
InterplaySetup.SafeForTranscodingFolder = insertInterplay + drow["Interplay_Engine_Hostname"].ToString() + insertDeliniator + drow["Interplay_Safe_Folder"].ToString();
InterplaySetup.SafeForTranscodingSubmitURI = "interplay://Interplay/" + drow["Interplay_Safe_Folder"].ToString();
InterplaySetup.TransferEngineHostname = drow["Transfer_Engine_Hostname"].ToString();
InterplaySetup.TransferPlaybackDevice = drow["Transfer_Profile"].ToString();
InterplaySetup.TranscodingProfile = drow["Transcoding_Profile"].ToString();
}
Значение переменного в классе InterplaySetup затем используется позже другими классами на протяжении всей программы для каждого потока. До тех пор, пока поток не будет завершен, я должен поддерживать переменную local в каждом потоке.
К сожалению, у меня возникают трудности с примерами синтаксиса, например здесь, в MSDN (https://msdn.microsoft.com/en-us/library/dd460703(v=vs.110).aspx), и я не могу применить его к своему конкретному сценарию.
Я хочу, чтобы потоки выполнялись параллельно - любая помощь с синтаксисом была бы высоко оценена.
Для каждого потока необходимо создать отдельный экземпляр 'InterplaySetup'. Похоже, что этот класс является 'static', поэтому он разделяется по всем потокам. – JRLambert
Вы знаете, что потоки исчезают после' Parallel.ForEach'. Поэтому, когда вы говорите «затем используются позже другими классами по всей программе для каждого потока», это кажется немного неправильным. – Enigmativity