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) { } }