private void ReleaseObject(IsolatedWorkContainer isolated) { CleanUp(isolated); lock (_available) { _available.Add(isolated); _inUse.Remove(isolated); } }
private IsolatedWorkContainer GetObject(string key) { lock (_available) { if (_available.Count(x => Compare(x, key)) != 0) { IsolatedWorkContainer isolated = _available.First(x => Compare(x, key)); _inUse.Add(isolated); _available.Remove(isolated); return(isolated); } else { //todo limits on pool size IsolatedWorkContainer isolated = new IsolatedWorkContainer(key); _inUse.Add(isolated); return(isolated); } } }
private bool Compare(IsolatedWorkContainer x, string key) { return((x.Key == key) || x.Key.Equals(key, StringComparison.InvariantCultureIgnoreCase)); //null keys are also keys }
private void CleanUp(IsolatedWorkContainer isolated) { isolated.Executor = null; }