public DbConnectionInstance GetDbConnection(string connectionString, bool waitingUntilUseable) { List <DbConnectionInstance> instances = null; lock (_dbConnInstances) { if (!_dbConnInstances.ContainsKey(connectionString)) { DbConnectionInstance instance = CreateNewInstance(connectionString); instance.IsBusy = true; instances = new List <DbConnectionInstance>(); instances.Add(instance); _dbConnInstances.Add(connectionString, instances); return(instance); } } instances = _dbConnInstances[connectionString]; lock (instances) { foreach (DbConnectionInstance instance in instances) { if (!instance.IsBusy) { instance.IsBusy = true; return(instance); } } // if (instances.Count < cstMaxConnectionCount) { DbConnectionInstance instance = CreateNewInstance(connectionString); instance.IsBusy = true; instances.Add(instance); return(instance); } } // while (true && waitingUntilUseable) { waitingLine: int n = instances.Count; for (int i = 0; i < n; i++) { if (!instances[i].IsBusy) { instances[i].IsBusy = true; return(instances[i]); } } Thread.Sleep(cstWaitingInterval); goto waitingLine; } return(null); }
public void FreeDbConnectionInstance(DbConnectionInstance instance) { instance.IsBusy = false; }