从昨天开始大量的谷歌搜索后,我发布了这个问题
我正在进行多线程处理,我正在使用Parrallel.For,我想知道我们如何在Parrallel.for中使用for循环。据我所知,这不是最好的做法,但现在我必须做我的RND工作
int dataPerBatch = 100;
ParallelLoopResult result = Parallel.For(0, totalLoops, (i) => UpdateRecords(i, lstVins));
public void UpdateRecords(int i, List<string> lst)
{
start = (i * dataPerBatch) + 1;
end = dataPerBatch * (i + 1);
//Inner For Loop
for (int j = start; j <= end; j++)
{
// Call individual list object to web-api and fetch the result in new list object
// Here the start and end value keep on chahnging
}
// Call this collection again to the web- api and do bulk update
}
但问题是内部for循环不等待,它与多线程值重叠(当parrallel.for迭代时)我尝试使用锁但没有用。
请注意:我没有粘贴整个代码,只粘贴了骨架
答案 0 :(得分:1)
您已在方法外声明变量start
和end
,因此所有线程将共享相同的变量。使它们成为方法的本地,以便线程拥有自己的变量集:
int start = (i * dataPerBatch) + 1;
int end = dataPerBatch * (i + 1);