Parallel.ForEach 循环次数丢失

.Net技术 码拜 5年前 (2016-04-29) 753次浏览
场景为一个list集合存放了文件的路径信息采用Parallel.ForEach循环list后循环莫名其妙的丢失了很多次
使用foreach循环就没有毛病代码如下
其中filterFileList为存有文件路径信息的集合。
sw = Stopwatch.StartNew();
int count = 0;
int enExists = 0;
try
{
Parallel.ForEach(filterFileList, currentFile =>
{
FileInfo fileObj = new FileInfo(currentFile);
if (fileObj.Exists)
{
fileCountL += fileObj.Length;
count++;
}
else
{
enExists++;
}
});
}
catch (AggregateException aex)
{
foreach (var ex in aex.InnerExceptions)
{
Logger.Error(ex.Message);
}
}
elapsed = sw.ElapsedMilliseconds.ToString();
Logger.Info(“Parallel.ForEach用时:” + elapsed + “毫秒,文件累计大小:” + GetFileSize(fileCountL) + “有” + count + “份文件,有” + enExists + “份文件无法找到”);
fileCountL = 0;
count = 0;
sw = Stopwatch.StartNew();
foreach (String str in filterFileList)
{
try
{
FileInfo fileObj = new FileInfo(str);
if (fileObj.Exists)
{
fileCountL += fileObj.Length;
count++;
}
}
catch (Exception)
{
continue;
}
}
elapsed = sw.ElapsedMilliseconds.ToString();
Logger.Info(“foreach用时:” + elapsed + “毫秒,文件累计大小:” + GetFileSize(fileCountL) + “有” + count + “份文件,有” + enExists + “份文件无法找到”);
日志如下:
2016-07-15 12:51:09 001 Info Parallel.ForEach用时:1303毫秒,文件累计大小:260 GB有87301份文件,有0份文件无法找到
2016-07-15 12:51:13 001 Info foreach用时:3060毫秒,文件累计大小:263 GB有87385份文件,有0份文件无法找到
如上,集合大小为87385 foreach循环次数是对的,但是Parallel.ForEach就少了.
不知道问题出在哪里?
解决方案

100

线程中访问公共资源要加锁

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Parallel.ForEach 循环次数丢失
喜欢 (0)
[1034331897@qq.com]
分享 (0)