Esempio n. 1
0
        public bool TryLock()
        {
            Interlocked.Increment(ref _queueLength);
            bool success = UninterruptableMonitor.TryEnter(_lock);

            Interlocked.Decrement(ref _queueLength);

            return(success);
        }
Esempio n. 2
0
        // Gets an enumerable of the tasks currently scheduled on this scheduler.
        protected sealed override IEnumerable <Task> GetScheduledTasks()
        {
            bool lockTaken = false;

            try
            {
                UninterruptableMonitor.TryEnter(_tasks, ref lockTaken);
                if (lockTaken)
                {
                    return(_tasks);
                }
                else
                {
                    throw new NotSupportedException();
                }
            }
            finally
            {
                if (lockTaken)
                {
                    UninterruptableMonitor.Exit(_tasks);
                }
            }
        }