public void Init(int count, string connectionString) { for (int i = 0; i < count; i++) { DbConnection connection = Npgsql.NpgsqlFactory.Instance.CreateConnection(); connection.ConnectionString = connectionString; connection.Open(); DBConnectionItem item = new DBConnectionItem(); item.Pool = this; item.Connection = connection; mConnectionPool.Push(item); } }
public void Push(DBConnectionItem item) { TaskCompletionSource <DBConnectionItem> work = null; lock (this) { if (mWaitQueue.Count > 0) { work = mWaitQueue.Dequeue(); } else { mConnectionPool.Push(item); } } if (work != null) { Task.Run(() => work.SetResult(item)); } }