我有一个ConcurrentDictionary,其中包含class
个对象。
ConcurrentDictionary每100毫秒更新一次。
Position对象包含一个名为CalcNet()
的函数,该函数返回总和。
当循环ConcurrentDictionary值(包含Position对象)时,我得到两个不同的结果。
每个迭代使用不同的方法并获得不同的结果。
Relations.GetEnumerator()
Relations.Values.Sum(x => x.Net());
代码:
public ConcurrentDictionary<string, Position> _relations = new ConcurrentDictionary<string, Position>();
public ConcurrentDictionary<string, Position> Relations { get { return _relations; } private set { _relations = value; } }
public decimal CalcNet()
{
decimal positive = 0;
decimal negative = 0;
var enumerator = Relations.GetEnumerator();
while (enumerator.MoveNext())
{
var item = enumerator.Current.Value;
var net = item.Net();
if(net > 0)
positive += net;
else
negative += net;
}
var lastNetCalc = (negative + positive);
var testSum = Relations.Values.Sum(x => x.Net());
if (lastNetCalc != testSum)
{
// why?
}
return lastNetCalc;
}
为什么if (lastNetCalc != testSum)
?
预期结果应该相同。
答案 0 :(得分:0)
您的应用多久符合一次lastNetCalc != testSum
条件?
可能是:
//while loop is ended
var lastNetCalc = (negative + positive);
//new value is added to dictionary
var testSum = Relations.Values.Sum(x => x.Net());
//lastNetCalc is not equal testSum for this case
可以提供Net()方法的定义吗?这样会改变Position类的内部状态吗?
private decimal _n = 0;
public decimal Net()
{
return ++_n;
}