gpt4 book ai didi

c# - Parallel.ForEach 与元组返回 c#

转载 作者:行者123 更新时间:2023-11-30 14:06:47 25 4
gpt4 key购买 nike

基于此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没有运气。任何帮助表示赞赏。

最佳答案

您的问题中没有太多上下文。最好能给个好的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, () => Tuple.Create(double.MaxValue, ""),
(item, loopState, 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;
}
}
}
);

关于c# - Parallel.ForEach 与元组返回 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45258311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com