public bool Enqueue(RedisAsyncRequest request) { if (request != null) { ValidateNotDisposed(); EnqueueInternal(request); return(true); } return(false); }
public RedisAsyncRequest <T> Enqueue <T>(RedisCommand command, RedisCommandExpect expect, string okIf) { if (command != null) { ValidateNotDisposed(); var member = new RedisAsyncRequest <T>(command, expect, okIf, new TaskCompletionSource <T>(command)); EnqueueInternal(member); return(member); } return(null); }
private void CancelRequest(RedisAsyncRequest member) { if (member != null) { try { member.Cancel(); } finally { member.Dispose(); } } }
private void EnqueueInternal(RedisAsyncRequest request) { lock (m_AsyncMessageQLock) { var prevTail = Interlocked.Exchange(ref m_QTail, request); if (prevTail != null) { var store = m_AsyncRequestQ; if (store != null) { store.AddLast(prevTail); } } m_Count++; } }
protected override void DoProcessRequest(RedisAsyncRequest request, RedisSocketContext context) { var cancelRequest = true; try { if (Disposed) { return; } if (request.Send(context)) { if (Disposed) { return; } Interlocked.Exchange(ref m_CurrentContext, context); var receiveQ = m_ReceiveQ; if (receiveQ != null) { receiveQ.Enqueue(request); cancelRequest = false; m_ReceiveGate.Set(); } } } catch (Exception) { } finally { if (cancelRequest) { request.Cancel(); } } }
protected virtual void DoProcessRequest(RedisAsyncRequest request, RedisSocketContext context) { request.Process(context); }
public bool TryDequeueOneOf(int dbIndex1, int dbIndex2, out RedisAsyncRequest result) { result = null; var member = (RedisAsyncRequest)null; lock (m_AsyncMessageQLock) { if (m_Count == 0) { return(false); } member = m_QTail; m_QTail = null; } if (member != null) { try { var command = member.Command; if ((dbIndex1 < 0 || command.DbIndex == dbIndex1) || (dbIndex2 < 0 || command.DbIndex == dbIndex2)) { m_Count--; result = member; return(true); } } catch (Exception) { } } if (m_AsyncRequestQ != null) { lock (m_AsyncMessageQLock) { var store = m_AsyncRequestQ; if (store != null) { var node = store.First; while (node != null) { try { member = node.Value; if (member != null) { try { var command = member.Command; if ((dbIndex1 < 0 || command.DbIndex == dbIndex1) || (dbIndex2 < 0 || command.DbIndex == dbIndex2)) { store.Remove(node); m_Count--; result = member; return(true); } } catch (Exception) { } } } catch (Exception) { } node = node.Next; } } } } return(false); }