private int CheckLingeringResources(long nowNs) { int workCount = 0; var lingeringResources = _lingeringResources; for (int lastIndex = lingeringResources.Count - 1, i = lastIndex; i >= 0; i--) { IManagedResource resource = lingeringResources[i]; if ((resource.TimeOfLastStateChange() + _ctx.ResourceLingerDurationNs()) - nowNs < 0) { ListUtil.FastUnorderedRemove(lingeringResources, i, lastIndex--); resource.Delete(); workCount++; } } return(workCount); }
private int checkLingeringResources(long nowNs) { if (nowNs > (_timeOfLastResourcesCheckNs + RESOURCE_CHECK_INTERVAL_NS)) { List <IManagedResource> lingeringResources = _lingeringResources; for (int lastIndex = lingeringResources.Count - 1, i = lastIndex; i >= 0; i--) { IManagedResource resource = lingeringResources[i]; if (nowNs > (resource.TimeOfLastStateChange() + RESOURCE_LINGER_NS)) { ListUtil.FastUnorderedRemove(lingeringResources, i, lastIndex--); resource.Delete(); } } _timeOfLastResourcesCheckNs = nowNs; return(1); } return(0); }
internal void LingerResource(IManagedResource managedResource) { managedResource.TimeOfLastStateChange(_nanoClock.NanoTime()); _lingeringResources.Add(managedResource); }