public void Dispose()
{
using(@lock.ForWriting())
{
var burdens = new KeyValuePair<object, Burden>[instance2Burden.Count];
instance2Burden.CopyTo(burdens, 0);
// NOTE: This is relying on a undocumented behavior that order of items when enumerating Dictionary<> will be oldest --> latest
foreach (var burden in burdens.Reverse())
{
if (instance2Burden.ContainsKey(burden.Key))
{
burden.Value.Release(this);
instance2Burden.Remove(burden.Key);
}
}
}
}
}