我被困住了,找不到解决方法。 我有一个长期运行的方法,该方法可以检索对象并将其插入列表中。我正在尝试使其并行以节省一些时间,但项目数量却不相同。
这是我的代码
var listXls = new List<ReporteXlsPippPrfE>();
foreach (var records in findItem)
{
var item = _plantillaPippBs.GetXlsProformaEpsByCveShcp(records.ftClaveCarteraSHCP);
if (item != null)
listXls.Add(item);
}
var ConcurrentlistXls = new ConcurrentBag<ReporteXlsPippPrfE>();
Parallel.ForEach(findItem, records =>
{
var item = _plantillaPippBs.GetXlsProformaEpsByCveShcp(records.ftClaveCarteraSHCP);
if (item != null)
ConcurrentlistXls.Add(item);
});
最后,ListXls对象始终检索79个项目,而ConcurrentlistXls对象改变项目的数量。我不知道我是否想念什么。
答案 0 :(得分:0)
我发现了问题。并非线程安全的方法不是GetXlsProformaEpsByCveShcp。
我要做的不是使用Parallel.ForEach,而是使用List
最后,这就是我更改代码的方式
var asyncBagTask = new List<Task>();
var ConcurrentlistXls = new ConcurrentBag<ReporteXlsPippPrfE>();
foreach (var records in findItem)
{
asyncBagTask.Add(Task.Run(() =>
{
var item = _plantillaPippBs.GetXlsProformaEpsByCveShcp(records.ftClaveCarteraSHCP);
if (item != null)
{
ConcurrentlistXls.Add(item);
}
}));
}
Task.WaitAll(asyncBagTask.ToArray());
感谢所有人。