我遇到一个并行foreach在完成执行之前关闭连接的问题。当我有一个常规的foreach循环runnung它很慢但它会返回一切。一旦我改为平行的foreach,它现在返回大约95%的数据并终止。
下面是我正在使用的代码:
var USPostalCodes = repository.GetUSPostalCodes();
var CAPostalCodes = repository.GetCAPostalCodes();
Parallel.ForEach(spreadsheetinfo, location =>
{
LocationData Locationdata = new LocationData()
{
id = location.Id,
Market = repository.GetMarketsForPostalCode(location.PostalCode, uploadedFile, USPostalCodes, CAPostalCodes),
};
locationlist.Add(Locationdata);
});
I added the following code to check and see what was going on, and that fixed it so that it is returning all rows so i know that a race condition exists but what i can't figure out is why and how ot fix it. any suggestions would be greatly appreciated
Console.WriteLine("Processing {0} on thread {1}", Locationdata,
Thread.CurrentThread.ManagedThreadId);
答案 0 :(得分:2)
locationlist
可能不是线程安全的。
因此,您正在破坏列表。
相反,您应该使用.AsParrelel.Select()
并行运行委托,并返回带有结果的IEnumerable<T>
。