public Task<IRedisClient> CreateClientAsync(RedisConnectionStringBuilder connectionString, BasicRedisSerializer serializer = null)
        {
            ThrowIfDisposed();

            var tcs = new TaskCompletionSource<IRedisClient>();

            var pool = _pools.GetOrAdd(connectionString.ToString(), k => new ConcurrentQueue<PoolItem>());

            PoolItem item;
            if (pool.TryDequeue(out item))
                tcs.SetResult(item.Client);
            else
            {
                CreateAndPrepareClient(connectionString, serializer)
                    .ContinueWith(t =>
                        {
                            if (t.IsFaulted)
                                tcs.SetException(t.Exception.UnwrapAggregation());
                            else tcs.SetResult(t.Result);
                        });
            }
            return tcs.Task;
        }
 public Task<IRedisClient> CreateClientAsync(string host, int port, int dbIndex = 0, BasicRedisSerializer serializer = null)
 {
     return CreateClientAsync(new RedisConnectionStringBuilder(host, port, dbIndex),serializer);
 }
 private Task<IRedisClient> CreateAndPrepareClient(RedisConnectionStringBuilder connectionString, BasicRedisSerializer serializer)
 {
     var client = _redisClientsFactory(connectionString, serializer);
     return client.PrepareClientConnection();
 }
 public Task<IRedisClient> CreateClientAsync(string connectionString, BasicRedisSerializer serializer = null)
 {
     return CreateClientAsync(new RedisConnectionStringBuilder(connectionString),serializer);
 }
 public PooledRedisClient(RedisClientsPool pool, RedisConnectionStringBuilder connectionString, BasicRedisSerializer serializer)
     : base(connectionString, serializer)
 {
     _pool = pool;
 }