【发布时间】:2017-07-22 19:20:33
【问题描述】:
基于此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, ""), (item,
loopState, 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。 任何帮助表示赞赏。
【问题讨论】:
标签: c# multithreading foreach parallel-processing