Asp.net mvc 4 平行Foreach竞争条件

Asp.net mvc 4 平行Foreach竞争条件,asp.net-mvc-4,parallel-processing,race-condition,parallel.foreach,Asp.net Mvc 4,Parallel Processing,Race Condition,Parallel.foreach,我遇到一个问题,并行foreach在连接完成执行之前关闭连接。当我有一个常规的foreach循环运行时,它很慢,但它会返回所有的东西。一旦我改为并行foreach,它现在返回大约95%的数据并终止 以下是我正在使用的代码: var USPostalCodes = repository.GetUSPostalCodes(); var CAPostalCodes = repository.GetCAPostalCodes(); Par

我遇到一个问题,并行foreach在连接完成执行之前关闭连接。当我有一个常规的foreach循环运行时,它很慢,但它会返回所有的东西。一旦我改为并行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);

locationlist
可能不是线程安全的。 因此,您正在破坏列表

相反,您应该使用
.AsParrelel.Select()
并行运行代理,并返回一个带有结果的
IEnumerable