Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 internal void LingerResource(IManagedResource managedResource)
 {
     managedResource.TimeOfLastStateChange(_nanoClock.NanoTime());
     _lingeringResources.Add(managedResource);
 }