public bool TryLock() { Interlocked.Increment(ref _queueLength); bool success = UninterruptableMonitor.TryEnter(_lock); Interlocked.Decrement(ref _queueLength); return(success); }
// 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); } } }