我有一个程序,其中有多个线程共享一个集合。一个线程正在修改列表,另一个线程将列表序列化并将其发送到Web服务。 我不时得到以下异常:
System.InvalidOperationException:'集合已被修改;枚举操作可能无法执行。'
在我真正的问题中,列表不包含int
而是域模型的实例。
该错误对我来说很明显,但不是补救措施。我编写了一个小程序来重现该问题:
static void Main(string[] args)
{
// from System.ServiceModel.dll.
var itemList = new SynchronizedCollection<int>();
var updateThread = new Thread(() =>
{
while (true)
{
itemList.Add(itemList.Count);
}
});
var serializeThread = new Thread(() =>
{
while (true)
{
try
{
JsonConvert.SerializeObject(itemList);
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
});
updateThread.Start();
serializeThread.Start();
Console.ReadKey();
}