集合已修改;枚举操作可能无法执行
我无法弄清此错误的原因,因为在附加调试器后,似乎没有发生此错误。下面是代码。 这是Windows服务中的WCF服务器。每当有数据事件时,服务就会调用NotifySubscribers方法(以随机间隔,但不是很频繁-每天大约800次)。 Windows Forms客户端进行预订时,订户ID被添加到订户字典中,而当客户端取消订阅时,将从该词典中删除它。该错误发生在客户退订时(或之后)。看来,下次调用NotifySubscribers()方法时,foreach()循环会失败,并在主题行中出现错误。该方法将错误写入应用程序日志,如下面的代码所示。当附加了调试器并且客户端取消订阅时,代码将正常执行。 您看到此代码有问题吗?我需要使字典具有线程安全性吗? [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)] public class SubscriptionServer : ISubscriptionServer { private static IDictionary<Guid, Subscriber> subscribers; public SubscriptionServer() { subscribers = new Dictionary<Guid, Subscriber>(); } public void NotifySubscribers(DataRecord sr) { foreach(Subscriber s in subscribers.Values) { try { s.Callback.SignalData(sr); } catch (Exception e) { DCS.WriteToApplicationLog(e.Message, System.Diagnostics.EventLogEntryType.Error); UnsubscribeEvent(s.ClientId); } } } …