public void ConnectAndRequest(Event req) { int waitHandle = req._WaitHandle; bool handleAllocated = false; if (waitHandle == 0) { waitHandle = WaitHandlePool.Acquire(); req._WaitHandle = waitHandle; handleAllocated = true; } lock (pendingRecords) { PendingRecord pendingRecord; if (!pendingRecords.TryGetValue(waitHandle, out pendingRecord)) { TimeoutEvent timeoutEvent = new TimeoutEvent { Key = waitHandle }; Bind(new Event { _WaitHandle = waitHandle }, OnEvent); Bind(timeoutEvent, OnTimeout); pendingRecord = new PendingRecord { HandleAllocated = handleAllocated, TimeoutToken = TimeFlow.Default.Reserve(timeoutEvent, ResponseTimeout) }; pendingRecords.Add(waitHandle, pendingRecord); } ++pendingRecord.Count; } Interlocked.Increment(ref sessionRefCount); ConnectAndSend(req); }
public void ConnectAndRequest(Event req) { int waitHandle = req._WaitHandle; bool handleAllocated = false; if (waitHandle == 0) { waitHandle = WaitHandlePool.Acquire(); req._WaitHandle = waitHandle; handleAllocated = true; } lock (pendingRecords) { PendingRecord pendingRecord; if (!pendingRecords.TryGetValue(waitHandle, out pendingRecord)) { TimeoutEvent timeoutEvent = new TimeoutEvent { Key = waitHandle }; Bind(new Event { _WaitHandle = waitHandle }, OnEvent); Bind(timeoutEvent, OnTimeout); pendingRecord = new PendingRecord { HandleAllocated = handleAllocated, TimeoutToken = TimeFlow.Default.Reserve(timeoutEvent, ResponseTimeout) }; pendingRecords.Add(waitHandle, pendingRecord); } ++pendingRecord.Count; } Interlocked.Increment(ref sessionRefCount); ConnectAndSend(req); }