private void SwitchSocket(RedisAsyncSocketBase socket)
 {
     using (var oldSocket = Interlocked.Exchange(ref m_Socket, socket))
     {
         CloseSocket(oldSocket);
     }
 }
        private void DoConnected(RedisAsyncSocketBase socket)
        {
            var connected = (socket != null) && socket.Connected;

            SwitchSocket(connected ? socket : null);

            var current = m_Socket;

            connected = (current != null) && current.Connected;

            if (!connected)
            {
                CloseSocket(socket);
            }
            else
            {
                OnConnect();

                if (UseBackgroundThread)
                {
                    InitBackgroundThread();
                }
                else if (m_Constructed && !m_SendWaitingQ.IsEmpty &&
                         m_SendStatus == RedisAsyncClientStatus.Idle)
                {
                    ThreadPool.QueueUserWorkItem(TrySendQCallback, this);
                }
            }
        }
 private static void CloseSocket(RedisAsyncSocketBase socket)
 {
     try
     {
         if (socket != null)
         {
             socket.Close();
         }
     }
     catch (Exception)
     { }
 }