并行处理/C#中的并行编程我需要处理多个函数并执行返回相同类型记录的结果。考虑到我的功能,我在visualstudio2010下使用c#:classSearch{publiclistGetrecordsofAAA(stringterm);公共列表GetrecordsofBBB(字符串术语);公共列表GetrecordsofCCC(字符串术语);我以这种方式调用Functionlistrecords1=Search.GetrecordsofAAA(heart);列出records2=Search.GetrecordsofBBB(heart);列出记录3=Search.GetrecordsofCCC(heart);这就是系列处理。如果可能的话,我需要同时填写记录1、记录2和记录3。//列出要调用的搜索函数。varSearches=newList>>{a=>GetrecordsofAAA(a),a=>GetrecordsofBBB(a),a=>GetrecordsofCCC(a),}//并行执行它们并将结果收集为wrecordIEnumerable列表的列表>result=Searches.AsParallel().Select(a=>a(heart));查看.NETFramework4中引入的任务并行库(TPL)(即使用VisualStudio2010)。更具体地说,就TPL而言,您的问题可以通过任务并行性来解决。现在,我自己不是TPL专家,但文档建议您应该能够使用Parallel.Invoke执行您想要的操作:usingSystem.Threading.Tasks;...列出记录1=null;列出记录2=null;列出记录3=null;//^将这些初始化为任何默认值以防止编译时错误。//编译器不知道下面的委托实际上会被调用,//所以如果没有初始化,你很快就会得到“使用未分配的//变量”错误。Parallel.Invoke(()=>{records1=Search.GetrecordsofAAA(heart);},()=>{records2=Search.GetrecordsofBBB(heart);},()=>{records3=Search.GetrecordsofCCC(heart);});PS:一旦你的方法并行执行,你需要确保它们都没有任何可能导致其他方法无法正常工作的副作用。(例如,如果这些方法读取和修改属于您的Search类的相同静态字段,这可能会导致问题。)使用TaskParallel库,您可以执行以下操作:listrecords1;l列出记录2;l列出记录3;任务task1=Task.Factory.StartNew(()=>records1=Search.GetrecordsofAAA(heart));任务task2=Task.Factory.StartNew(()=>records2=Search.GetrecordsofBBB(heart));任务task3=Task.Factory.StartNew(()=>records3=Search.GetrecordsofCCC(heart));Task.WaitAll(task1,task2,task3);//等待所有三个任务完成//在Parallel.Invoke认为操作不会异步后执行操作。如果您需要garuntee,请使用上述任务。这是一个可能的解决方案的草图:为每个要运行的方法创建任务,启动每个任务,然后WaitAll()等待每个任务完成。以上就是C#学习教程:C#并行处理/并行编程分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注—//创建一个方法数组来运行Func>[]methods=new[]{s=>GetRecordsOfAAA((字符串)s),s=>GetRecordsOfBBB((字符串)s),s=>GetRecordsOfCCC((字符串)s)};//创建任务数组Task>[]tasks=newTask>[methods.Length];//创建并启动每个任务for(inti=0;i>.Factory.StartNew(methods[i],heart);}//等待所有任务完成。结果在tasks[n].ResultTask.WaitAll(任务);
