Я получил это исключение
Блокировка чтения снимается без удержания.
в System.Threading.ReaderWriterLockSlim.ExitReadLock ()at.. GetBreed (String)
Ниже приведено единственное место в коде, которое обращается к блокировке. Как видите, рекурсии нет. У меня возникли проблемы с пониманием того, как могло произойти это исключение.
static readonly Dictionary<string, BreedOfDog> Breeds
= new Dictionary<string,BreedOfDog>();
static BreedOfDog GetBreed(string name)
{
try
{
rwLock.EnterReadLock();
BreedOfDog bd;
if (Breeds.TryGetValue(name, out bd))
{
return bd;
}
}
finally
{
rwLock.ExitReadLock();
}
try
{
rwLock.EnterWriteLock();
BreedOfDog bd;
//make sure it hasn't been added in the interim
if (Breeds.TryGetValue(t, out bd)
{
return bd;
}
bd = new BreedOfDog(name); //expensive to fetch all the data needed to run the constructor, hence the caching
Breeds[name] = bd;
return bd;
}
finally
{
rwLock.ExitWriteLock();
}
}