public void Set() { List <AsyncWaiter> toCallList = null; AsyncWaiter toCall = null; if (!this.isSignaled) { lock (syncObject) { if (!this.isSignaled) { if (this.resetMode == EventResetMode.ManualReset) { this.isSignaled = true; Monitor.PulseAll(syncObject); toCallList = this.asyncWaiters; this.asyncWaiters = null; } else { if (this.syncWaiterCount > 0) { Monitor.Pulse(syncObject); } else if (this.asyncWaiters != null && this.asyncWaiters.Count > 0) { toCall = this.asyncWaiters[0]; this.asyncWaiters.RemoveAt(0); } else { this.isSignaled = true; } } } } } if (toCallList != null) { foreach (AsyncWaiter waiter in toCallList) { waiter.CancelTimer(); waiter.Call(); } } if (toCall != null) { toCall.CancelTimer(); toCall.Call(); } }
public void Set() { List <AsyncWaiter> toCallList = null; AsyncWaiter toCall = null; if (!_isSignaled) { lock (_syncObject) { if (!_isSignaled) { if (_resetMode == EventResetMode.ManualReset) { _isSignaled = true; Monitor.PulseAll(_syncObject); toCallList = _asyncWaiters; _asyncWaiters = null; } else { if (_syncWaiterCount > 0) { Monitor.Pulse(_syncObject); } else if (_asyncWaiters != null && _asyncWaiters.Count > 0) { toCall = _asyncWaiters[0]; _asyncWaiters.RemoveAt(0); } else { _isSignaled = true; } } } } } if (toCallList != null) { foreach (var waiter in toCallList) { waiter.CancelTimer(); waiter.Call(); } } if (toCall != null) { toCall.CancelTimer(); toCall.Call(); } }
public void Set() { List <AsyncWaiter> asyncWaiters = null; AsyncWaiter waiter = null; if (!this.isSignaled) { lock (this.syncObject) { if (!this.isSignaled) { if (this.resetMode == EventResetMode.ManualReset) { this.isSignaled = true; Monitor.PulseAll(this.syncObject); asyncWaiters = this.asyncWaiters; this.asyncWaiters = null; } else if (this.syncWaiterCount > 0) { Monitor.Pulse(this.syncObject); } else if ((this.asyncWaiters != null) && (this.asyncWaiters.Count > 0)) { waiter = this.asyncWaiters[0]; this.asyncWaiters.RemoveAt(0); } else { this.isSignaled = true; } } } } if (asyncWaiters != null) { foreach (AsyncWaiter waiter2 in asyncWaiters) { waiter2.CancelTimer(); waiter2.Call(); } } if (waiter != null) { waiter.CancelTimer(); waiter.Call(); } }
private static void OnTimerComplete(object state) { AsyncWaiter item = (AsyncWaiter)state; AsyncWaitHandle parent = item.Parent; bool flag = false; lock (parent.syncObject) { if ((parent.asyncWaiters != null) && parent.asyncWaiters.Remove(item)) { item.TimedOut = true; flag = true; } } item.CancelTimer(); if (flag) { item.Call(); } }
static void OnTimerComplete(object state) { AsyncWaiter waiter = (AsyncWaiter)state; AsyncWaitHandle thisPtr = waiter.Parent; bool callWaiter = false; lock (thisPtr.syncObject) { // If still in the waiting list (that means it hasn't been signaled) if (thisPtr.asyncWaiters != null && thisPtr.asyncWaiters.Remove(waiter)) { waiter.TimedOut = true; callWaiter = true; } } waiter.CancelTimer(); if (callWaiter) { waiter.Call(); } }