有没有办法使用TPL对枚举对象(IDataReader)执行并行操作?

时间:2014-06-23 11:22:54

标签: .net multithreading task-parallel-library

我有一个枚举对象,我目前正在使用

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吗? 注意:我没有计算源对象的行数

1 个答案:

答案 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;
});