我有一个枚举对象,我目前正在使用
int count=0;
string key= string.Empty
string prv_Key = string.Empty
while(source.MoveNext())
{
count++;
key = source["ItemId"]
---
---- Some logic ---
prv_Key = key;
}
我可以使用线程安全的方法将上面的代码转换为TPL吗? 注意:我没有计算源对象的行数
答案 0 :(得分:1)
您的代码显示范围内有IEnumerator<T>
,但我们假设您还拥有用于创建枚举数的IEnumerable<T>
。
您可以使用Parallel.ForEach
来并行化循环,并使用Interlocked.Increment
以原子方式递增count
。
此外,根据您的显示,似乎没有理由在循环外声明两个字符串。除非您需要跨线程共享这些变量,否则不要。
int count = 0;
Parallel.ForEach(items, i => {
int newCount = Interlocked.Increment(ref count);
string key = source["ItemId"]
string prv_Key = string.Empty;
});