我有以下代码,可以为字典添加一些值。当项目添加到词典时,Linq.Contains
方法会抛出System.InvalidOperationException
"Collection was modified; enumeration operation may not execute."
吗?
private static object _lock = new object();
private static Dictionary<Type, A> _dic = new Dictionary<Type, A>();
public static AddNewValue(Type t, A value)
{
if ( !_dic.Keys.Contains( t ) )
{
lock ( _lock )
{
if ( !_dic.Keys.Contains( t ) )
{
_dic.Add( t, value );
}
}
}
}
答案 0 :(得分:4)
是的,这不是线程安全的。如果一个线程正在修改字典,而另一个线程在锁外执行Contains
,则会出现异常。