Asp.net 收集被修改;枚举操作不能执行

Asp.net 收集被修改;枚举操作不能执行,asp.net,web-services,c#-4.0,asmx,Asp.net,Web Services,C# 4.0,Asmx,我有一个错误 收集被修改;枚举操作不能执行。 位于System.Collections.Queue.QueueEnumerator.MoveNext()处 看起来您有一个从多个线程(针对不同的请求)读取和修改的集合。首先,使用Queue,这是不安全的,尤其是当您在另一个集合中修改集合时,在集合中进行迭代时,这是不安全的。(编辑:我刚刚注意到您甚至没有使用泛型集合。如果您使用的是.NET 4,则没有理由使用非泛型集合…) 现在还不清楚您想要实现什么-您可能只需更改为使用即可,但您需要知道,当您遍历

我有一个错误 收集被修改;枚举操作不能执行。 位于System.Collections.Queue.QueueEnumerator.MoveNext()处


看起来您有一个从多个线程(针对不同的请求)读取和修改的集合。首先,使用
Queue
,这是不安全的,尤其是当您在另一个集合中修改集合时,在集合中进行迭代时,这是不安全的。(编辑:我刚刚注意到您甚至没有使用泛型集合。如果您使用的是.NET 4,则没有理由使用非泛型集合…)


现在还不清楚您想要实现什么-您可能只需更改为使用即可,但您需要知道,当您遍历集合时,您读取的值可能已在另一个线程中退出队列。

看起来您有一个从多个线程(针对不同的请求)读取和修改的集合。首先,使用
Queue
,这是不安全的,尤其是当您在另一个集合中修改集合时,在集合中进行迭代时,这是不安全的。(编辑:我刚刚注意到您甚至没有使用泛型集合。如果您使用的是.NET 4,则没有理由使用非泛型集合…)


不清楚您试图实现的目标是什么-您可能不需要更改为使用,但您需要知道,当您迭代集合时,您读取的值可能已经在另一个线程中退出队列。

是的,jon,同时有多个请求使用此队列。这种情况并不总是发生。一天2-3次。我应该为此修改什么代码。@cpsinghal:使用锁定或支持并发访问的集合(如ConcurrentQueue)是的,jon,一次有多个请求使用此队列。这种情况并不总是发生。一天2-3次。我应该为此修改什么代码。@cpsinghal:使用锁定或支持并发访问的集合(如ConcurrentQueue)
        Queue ReqQ = (Application["ReqQ"] != null) ? ((Queue)Application["ReqQ"]) : 
new Queue(50);

             if (ReqQ != null)
             {
                      foreach (object OReq in ReqQ)
                    {
                             string mId = (string)OReq;
                             if (mId.Split('~')[1].Equals(reqUid.Split('~')[1]) && (DateTime.Parse(mId.Split('~')[0]).AddMinutes(1 * int.Parse(string.IsNullOrEmpty(delay) ? "0" : delay)) > DateTime.Now))

                             {
                                      isSuccess = false;
                                      break;
                            }
                     }

                }

                else
                {
                            ReqQ = new Queue(10);
                             isSuccess = true;
                }

                if (isSuccess)
                {

                         if (ReqQ.Count >= 10) //only keep last 10 messages in application cache
                                ReqQ.Dequeue();

                                    ReqQ.Enqueue(reqUid);
                                    Application["ReqQ"] = ReqQ; 
                }