我有问题得到正确的语法,以确保我的变量由多个线程共享不会互相干扰,但保持本地线程。C#Parallel.ForEach共享变量语法
我正在遍历一个数据表来定义多个变量。每个线程都依赖于它自己的一组下面的变量。显然,这代码重写变量每个线程开始时:
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类的变量值再后来由其他类在整个程序为每个线程使用。在线程完成之前,我必须保持每个线程的本地变量。
不幸的是,我很难在MSDN(https://msdn.microsoft.com/en-us/library/dd460703(v=vs.110).aspx)这里使用这种语法的例子,我无法将它应用于我的特定场景。
我想要的线程并行运行 - 任何语法的帮助将不胜感激。
您需要为每个线程创建一个单独的'InterplaySetup'实例。看起来类是'static',所以它在所有线程中共享 – JRLambert
你知道线程在'Parallel.ForEach'后面消失了。因此,当你说“然后在整个程序中为其他类使用后,每个线程”看起来有点不对。 – Enigmativity