Пример #1
0
        public AsyncEntryBlockUC TryEnter(int milliseconds)
        {
            AccessItem access;

            using (SpinLock.Enter())
            {
                if (LockStatus == Status.Opened)
                {
                    LockStatus = Status.Locked;
                    return(new AsyncEntryBlockUC(ExclusiveEntry));
                }
                Queue.Enqueue(access = AccessItem.NewTimeLimitedTCS(milliseconds));
            }
            return(new AsyncEntryBlockUC(null, access.TCS));
        }
Пример #2
0
        public EntryBlockUC TryEnter(int milliseconds)
        {
            AccessItem access;

            using (SpinLock.Enter())
            {
                if (LockStatus == Status.Opened)
                {
                    LockStatus = Status.Locked;
                    return(ExclusiveEntry);
                }
                Queue.Enqueue(access = AccessItem.NewTimeLimitedTCS(milliseconds));
            }

            return(access.WaitForResult());           //waiting synchronously for completion
        }