WaiterEntry.Timeout C# (CSharp) Метод

Timeout() публичный Метод

Mark the wait entry that it has been timed out
public Timeout ( ) : bool
Результат bool
            public bool Timeout()
            {
                lock(this)
                {
                    // Time out can happen only if the waiter wasn't marked as
                    // signaled
                    if (!_isSignaled)
                    {
                        // We don't remove the waiter from the queue, the DequeueWorkItem
                        // method skips _waiters that were timed out.
                        _isTimedout = true;
                        return true;
                    }
                }
                return false;
            }

Usage Example

Пример #1
0
        /// <summary>
        /// Waits for a work item or exits on timeout or cancel
        /// </summary>
        /// <param name="millisecondsTimeout">Timeout in milliseconds</param>
        /// <param name="cancelEvent">Cancel wait handle</param>
        /// <returns>Returns true if the resource was granted</returns>
        public WorkItem DequeueWorkItem(int millisecondsTimeout, WaitHandle cancelEvent)
        {
            WaiterEntry newWaiterEntry = null;
            WorkItem    workItem       = null;

            lock (this)
            {
                this.ValidateNotDisposed();
                if (this._workItems.Count > 0)
                {
                    return(this._workItems.Dequeue() as WorkItem);
                }
                newWaiterEntry = this.GetThreadWaiterEntry();
                this.PushWaiter(newWaiterEntry);
            }
            WaitHandle[] waitHandles = new WaitHandle[] { newWaiterEntry.WaitHandle, cancelEvent };
            int          num         = WaitHandle.WaitAny(waitHandles, millisecondsTimeout, true);

            lock (this)
            {
                bool flag = 0 == num;
                if (!flag)
                {
                    bool flag2 = newWaiterEntry.Timeout();
                    if (flag2)
                    {
                        this.RemoveWaiter(newWaiterEntry, false);
                    }
                    flag = !flag2;
                }
                if (flag)
                {
                    workItem = newWaiterEntry.WorkItem;
                    if (workItem == null)
                    {
                        workItem = this._workItems.Dequeue() as WorkItem;
                    }
                }
            }
            return(workItem);
        }
All Usage Examples Of WaiterEntry::Timeout