Parallel.ForEach with tuple return c#
发布时间:2020-12-15 23:40:02 所属栏目:百科 来源:网络整理
导读:基于这个 example,我试图用元组返回做一个平行的foreach. double min = double.MaxValue;object syncObject = new object(); Parallel.ForEach(collection,() = double.MaxValue,(item,loopState,localState) = { double value = item.PerformComputation();
基于这个
example,我试图用元组返回做一个平行的foreach.
double min = double.MaxValue; object syncObject = new object(); Parallel.ForEach(collection,() => double.MaxValue,(item,loopState,localState) => { double value = item.PerformComputation(); return System.Math.Min(localState,value); },localState => { lock(syncObj) min = System.Math.Min(min,localState); } ); Console.Write(min + "n"); 上面的代码工作正常,但在我的场合(正确的最小值),但我不想输出最小值,但输出该值的’名称’,所以我尝试这样的事情: double min = double.MaxValue; string minName = ""; object syncObject = new object(); Parallel.ForEach(collection,() => Tuple.Create(double.MaxValue,""),localState) => { double value = PerformComputation(item.Item1.Value); string name = item.Item1.Key; return //helpHere },localState => { lock(syncObj) min = //help here minName = //help here } ); Console.Write(minName + "n"); 尝试了几件不起作用的东西.我也读过没有运气的microsoft’s example. 解决方法
你的问题中没有太多的背景.你最好提供一个好的
Minimal,Complete,and Verifiable code example来展示你正在做的事情.但是,似乎在您的第二个代码版本中,您已将计算模型从具有PerformComputation()方法的对象更改为本地定义的PerformComputation()方法,以及某种Tuple对象的集合,其中Item1成员是KeyValuePair< TKey,TValue>某种.
做出这些假设,这样的事情应该适用于你的场景: Tuple<double,string> result = Tuple.Create(double.MaxValue,""); object syncObject = new object(); Parallel.ForEach(collection,localState) => { double value = PerformComputation(item.Item1.Value); if (value < localState.Item1) { localState = Tuple.Create(value,item.Item1.Key); } return localState; },localState => { lock(syncObj) { if (localState.Item1 < result.Item1) { result = localState; } } } ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |