public void Release(object instance)
{
if (instance == null) throw new ArgumentNullException("instance");
using (var locker = @lock.ForReadingUpgradeable())
{
Burden burden;
if (!instance2Burden.TryGetValue(instance, out burden))
return;
locker.Upgrade();
if (!instance2Burden.TryGetValue(instance, out burden))
return;
if (instance2Burden.Remove(instance))
{
if (burden.Release(this) == false)
{
instance2Burden[instance] = burden;
}
}
}
}