Exemple #1
0
        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();
            }
        }
Exemple #2
0
        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();
            }
        }
Exemple #5
0
        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();
            }
        }