private void RemoveOverdueEntities()
{
var now = DateTime.Now;
// Get all expired entities
var disappear = new List<Entity>();
_creaturesRWLS.EnterReadLock();
try
{
disappear.AddRange(_creatures.Values.Where(a => a.DisappearTime > DateTime.MinValue && a.DisappearTime < now));
}
finally
{
_creaturesRWLS.ExitReadLock();
}
_itemsRWLS.EnterReadLock();
try
{
disappear.AddRange(_items.Values.Where(a => a.DisappearTime > DateTime.MinValue && a.DisappearTime < now));
}
finally
{
_itemsRWLS.ExitReadLock();
}
_propsRWLS.EnterReadLock();
try
{
disappear.AddRange(_props.Values.Where(a => a.DisappearTime > DateTime.MinValue && a.DisappearTime < now));
}
finally
{
_propsRWLS.ExitReadLock();
}
// Remove them from the region
foreach (var entity in disappear)
entity.Disappear();
}