今天用平行线程跑了一给程序,大致的程序业务为:我需要对商品先的商品图片进行遍历和操作,所以我先把商品实体集合装入平行线程的循环中,其次在循环商品的同时,根据商品 ID获取到该商品下的图片实体集合,然后遍历图片实体集合,将商品 ID和图片ID写入日志,结果发现,商品ID不一致。
这可能是微软平行线程中的一个bug, 绕开这种问题则查询出商品图片,同时将商品 ID也装入商品图片集合中,这样输出是商品 ID和商品图片ID才相对于。
平行线程中又嵌套循环,使用时注意了。
以下是实体值串了的主体代码。
//遍历商品
Parallel.ForEach(listJavaProduct, (m, loopState) =>
{
listJavaImage = dal.GetJavaImageList(productID, ref strMessage);//获取到该商品下的图片集合
Thread.Sleep(5);//休眠5毫米,注意是停顿下测试效果好些
foreach (var pic in listJavaImage)//遍历商品图片
{
log.Info("商品ID:" + m.ID + "实际的商品ID
:" + pic.ID + "商品图片ID:" + pic.ImageID);
}
});
以下是实体值串了的部分日志
商品ID:6345 - 实际的商品ID : 2商品图片ID:102717
商品ID:9310 - 实际的商品ID :6 商品图片ID:54114
商品ID:9322 - 实际的商品ID :3 商品图片ID:97914
商品ID:9310 - 实际的商品ID :4 商品图片ID:97916
商品ID:9310 - 实际的商品ID :4 商品图片ID:97918
商品ID:9310 - 实际的商品ID :4 商品图片ID:97920